2012-07-15 81 views
0

如果我有一个按钮执行相对于一个顶层窗口或根的处理程序 - 它可以修改另一个顶层的窗口小部件吗?这样做的标准方法是什么?Tkinter顶层通信

回答

1

我在Tkinter没有经验,但我相信它与PyQt4没有什么不同。一般你想要父母的孩子关系。父窗口小部件包含子窗口小部件并可以修改它们。孩子们通常对他们的父母不太了解,并且会通过信号或事件进行交流。

当处理程序触发时,应该可以自由修改它所知道的小部件。也就是说,如果您的顶层窗口有10个小部件,并且包含该处理程序作为方法,则应允许该方法通过self属性修改10个小部件。

喜欢的东西:

class MyTopWindow: 

    def __init__(self): 
     self.widget1 = Widget 
     self.widget2 = Widget 
     self.button = Button 

     #self.button.clicked -> self.handler 

    def handler(self): 
     self.widget1.someAttribute = 1 

button.click() # -> handler() 

您使用的成分构建部件的内部部件。你应该避免的是一个处理器,它引用了一个它并不拥有的全局小部件。

+0

一个深思熟虑的答案 - 可能是正确的答案。我试图回答一个我真的不应该的问题。 – MKaras 2012-07-15 00:54:42

+0

没有一个很好的问题。当你在结构的顶部有一个“消息传递”的抽象层时,可能会引起混淆。 – jdi 2012-07-15 01:00:20

0

是的,按钮(或任何事件)的处理程序可以修改任何其他顶层的任何窗口小部件。只要该处理程序具有对小部件的引用,处理程序就可以对其进行修改。这方面没有任何限制。