2012-07-15 78 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

是的,按鈕(或任何事件)的處理程序可以修改任何其他頂層的任何窗口小部件。只要該處理程序具有對小部件的引用,處理程序就可以對其進行修改。這方面沒有任何限制。