Python Tkinter顶层通信

Python Tkinter顶层通信,python,tkinter,Python,Tkinter,如果我有一个按钮,它可以执行与一个顶级窗口或根相关的处理程序,那么它可以修改另一个顶级窗口中的小部件吗?做这件事的标准方法是什么?我在Tkinter方面没有经验,但我确信它与PyQt4没有什么不同。通常,您需要父子关系。父窗口小部件包含子窗口小部件并可以修改它们。孩子们通常不应该太了解他们的父母,而应该通过信号或事件进行交流 当处理程序启动时,它应该可以自由地修改它所知道的小部件。也就是说,如果顶级窗口有10个小部件,并且包含作为方法的处理程序,那么应该允许该方法通过self属性修改这10个小部

如果我有一个按钮,它可以执行与一个顶级窗口或根相关的处理程序,那么它可以修改另一个顶级窗口中的小部件吗?做这件事的标准方法是什么?

我在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()

您可以使用组合在小部件内部构建小部件。您应该避免的是处理程序引用一个它实际上并不拥有的全局小部件。

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

一个深思熟虑的答案——也许是正确的答案。我想回答一个我真的不应该回答的问题。不,这是一个很好的问题。当您在结构的顶部有一个抽象的“消息传递”层时,它可能会令人困惑。