如何在另一个小部件事件处理程序中访问一个小部件: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 的实例几乎从来都不是一个好主意。阅读: