如何在另一个小部件事件处理程序中访问一个小部件:Tkinter
How to access a widget in another widget event handler : Tkinter
我正在 tkinter 中创建一个 GUI,在单击按钮后出现的子 window 中有一个 listbox
和一个 Text
项目。 Listbox
显示 dict
的值,它们基本上是磁盘映像中 files/directories 的名称。
我想在 <ListboxSelect>
事件和所选文件的显示类型或路径上更改 Text
小部件的文本。
现在我不能使 Text
全局化,因为它必须出现在子 window 上,所以我需要一种在 Listbox
的事件处理程序中访问它的方法。我可以提供 Textbox
的处理程序参考吗?
这是我的代码;
def command(event):
... #Need to change the Text here, how to access it?
def display_info(dict,filename):
child_w = Tk()
listbox = Listbox(child_w)
textview = Text(child_w)
...
listbox.bind(<ListboxSelect>,command)
def upload_file():
window = Tk()
upl_button = Button(command=upload_file)
window.mainloop()
有没有办法将文本视图创建为全局文本视图,然后稍后更改其属性以显示在 child_window 等
这里我能想到的两个解决方案是使 textview
成为全球化变量或将 textview
作为参数传递给 command()
。
- 参数解:
def command(event,txtbox):
txtbox.delete(...)
def display_info(dict,filename):
child_w = Tk()
listbox = Listbox(child_w)
textview = Text(child_w)
...
listbox.bind('<ListboxSelect>',lambda event: command(event,textview))
- 或者只是将其全球化:
def command(event):
textview.delete(...)
def display_info(dict,filename):
global textview
child_w = Tk()
listbox = Listbox(child_w)
textview = Text(child_w)
...
listbox.bind('<ListboxSelect>',command)
虽然说了这么多,但最好记住,创建多个 Tk
的实例几乎从来都不是一个好主意。阅读:
我正在 tkinter 中创建一个 GUI,在单击按钮后出现的子 window 中有一个 listbox
和一个 Text
项目。 Listbox
显示 dict
的值,它们基本上是磁盘映像中 files/directories 的名称。
我想在 <ListboxSelect>
事件和所选文件的显示类型或路径上更改 Text
小部件的文本。
现在我不能使 Text
全局化,因为它必须出现在子 window 上,所以我需要一种在 Listbox
的事件处理程序中访问它的方法。我可以提供 Textbox
的处理程序参考吗?
这是我的代码;
def command(event):
... #Need to change the Text here, how to access it?
def display_info(dict,filename):
child_w = Tk()
listbox = Listbox(child_w)
textview = Text(child_w)
...
listbox.bind(<ListboxSelect>,command)
def upload_file():
window = Tk()
upl_button = Button(command=upload_file)
window.mainloop()
有没有办法将文本视图创建为全局文本视图,然后稍后更改其属性以显示在 child_window 等
这里我能想到的两个解决方案是使 textview
成为全球化变量或将 textview
作为参数传递给 command()
。
- 参数解:
def command(event,txtbox):
txtbox.delete(...)
def display_info(dict,filename):
child_w = Tk()
listbox = Listbox(child_w)
textview = Text(child_w)
...
listbox.bind('<ListboxSelect>',lambda event: command(event,textview))
- 或者只是将其全球化:
def command(event):
textview.delete(...)
def display_info(dict,filename):
global textview
child_w = Tk()
listbox = Listbox(child_w)
textview = Text(child_w)
...
listbox.bind('<ListboxSelect>',command)
虽然说了这么多,但最好记住,创建多个 Tk
的实例几乎从来都不是一个好主意。阅读: