为什么树视图的项方法在这种情况下不起作用?



我用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)

但我不知道它为什么成功,甚至不知道它是否会带来一些意想不到的问题。

相关内容

最新更新