我用Python tkinter编写了一个GUI程序。为了实现某些功能,在Toplevel
窗口中,某个事件触发了它的一个方法,该方法将调用Tk
窗口的Treeview
小部件的item(ID, tags=(some_tag))
来更改Treeview
内容的样式。但是,即使包含.item()
的代码段已经运行并且没有发生错误,它也不起作用。我对应的代码片段如下(省略了一些不相关的部分(。
class Main_window(Tk):
# some_code_omitted...
def create_widgets():
# some_code_omitted...
self.tv1 = ttk.Treeview()
class A_Toplevel(Toplevel):
def __init__(self, parent):
self.parent = parent
# some_code_omitted...
def some_foo(self, event):
self.parent.tv1.item(ID, tags=(some_tag))
经过一番尝试,我发现似乎只有在Main_window
中调用tv.item()
时,它才能工作。后来我在Main_window
中编写了一个方法来调用tv.item()
。但是当A_Toplevel
的实例调用它时,它仍然根本不起作用。
class Main_window(Tk):
# some_code_omitted...
def create_widgets():
# some_code_omitted...
self.tv1 = ttk.Treeview()
def a_foo(self, ):
self.tv1.item(ID, tags=(some_tag))
class A_Toplevel(Toplevel):
def __init__(self, parent):
self.parent = parent
# some_code_omitted...
def some_foo(self, event):
self.parent.a_foo()
出了什么问题,我该如何解决这个问题?
哦!取得了一些进展。
今天,我偶尔用threading
模块找到了一种解决问题的方法。代码如下:
def a_foo_thr(self, ID, some_tag):
thr = threading.Thread(target=self.a_foo, args=(ID, some_tag))
thr.start()
def a_foo(self, ID, some_tag):
self.tv1.item(ID, some_tag)
但我不知道它为什么成功,甚至不知道它是否会带来一些意想不到的问题。