Python Tkinter:如何在<Destroy>事件回调中从ScrolledText小部件获取文本?

X战警

我知道ScrolledText被构造为Text对象(但在框架中具有附加的滚动条)。但是,当关闭窗口并printText()调用方法时,以下代码将引发错误

import Tkinter as tk
import ttk
import ScrolledText as st
class tkGui(object):
    def printText(self, event):
        print "It works!"
        self.mText.get("1.0", 'end-1c')

    def __init__(self, window):
        # create widgets
        self.frame=tk.Frame(window)
        self.mText = st.ScrolledText(self.frame)
        self.mText.bind('<Destroy>',self.printText)
        # place widgets
        self.frame.pack()
        self.mText.pack()

window = tk.Tk()
app = tkGui(window)
window.mainloop()

错误:

[...]
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 3077, in get
  return self.tk.call(self._w, 'get', index1, index2)
TclError: invalid command name ".140506094171344.140506094172280.140506094172496"

我究竟做错了什么?

萨尔斯帕兹

销毁主窗口后,其所有子部件都将销毁,并且您将无法访问它们。(这在技术上是不正确的,正如布莱恩·奥克利(Bryan Oakley)的答案所指出的那样,但这是我的想法。在销毁后尝试使用这些小部件充其量是有问题的。)

您需要使用 wm_protocol

http://nullege.com/codes/search/Tkinter.Tk.wm_protocol

import Tkinter as tk
import ttk
import ScrolledText as st
class tkGui(object):
    def printText(self):
        print "It works!"
        self.mText.get("1.0", 'end-1c')
        self.window.destroy()

    def __init__(self, window):
        # create widgets
        self.window = window
        self.frame=tk.Frame(window)
        self.mText = st.ScrolledText(self.frame)
        #self.mText.bind('<Destroy>',self.printText)
        window.wm_protocol("WM_DELETE_WINDOW", self.printText)
        # place widgets
        self.frame.pack()
        self.mText.pack()

window = tk.Tk()
app = tkGui(window)
window.mainloop()

这里有几个更改。我从中删除了event参数,printText并添加了对的调用self.window.destroy请注意,我必须添加self.window属性才能进行此调用。基本的更改是使用wm_protocol而不是绑定到事件。其他都是必然的后果。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获取Bokeh小部件事件和属性的列表(可用于触发Python回调)

Tkinter(python3)如何在文本小部件中垂直插入文本?

如何在python类中引用Tkinter小部件

Python Tkinter-如何在Canvas中包含小部件?

如何在文本小部件 python tkinter 中從樹視圖打開文件

如何在标签小部件python tkinter中更改文本大小

Python Tkinter-在root.destroy()之后从Entry获取值

如何在python中的多个文本小部件中获取选定的文本?

修改Tkinter Entry小部件时,如何获取事件回调?

Python Tkinter 文本小部件中的随机 { }

如何在python tkinter的文本小部件中突出显示python的整个语法(包括每个模块的关键字、类等)

如何获取小部件的名称Python Tkinter

Python 3 Tkinter:如何在Tkinter文本中自动换行

Python Tkinter,如何在Tkinter TreeView中获取某项的子项?

如何在python tkinter中制作输入小部件在按下回车键时给我里面的文本

如何在Tkinter python中替换标签?

Python:从tkinter scrolledtext获取文本并逐行读取

Python:如何在标签小部件(tkinter)中动态显示图像

如何在Python中的Tkinter的小部件上使用Tcl / Tk绑定函数?

如何在Python中重置Tkinter Text小部件突出显示?

如何在Python中检索tkinter ttk Scale小部件的整数值?

Python,如何在 tkinter spinbox 小部件中迭代十六进制值

Python Tkinter文本小部件中的隐藏或“隐藏”文本

将文本插入到 python tkinter 文本小部件中

Tkinter Entry小部件之后的事件回调

如何将Tkinter destroy()绑定到Debian中的键?

如何在Tkinter文本小部件中获取文本的当前长度

如何在 Python/Tkinter 文本中添加文本

Tkinter,Python:如何保存在“输入”小部件中输入的文本?如何移动标签?