0

1 つのトップレベル ウィンドウまたはルートに関連してハンドラーを実行するボタンがある場合、別のトップレベルのウィジェットを変更できますか? これを行う標準的な方法は何ですか?

4

2 に答える 2

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

コンポジションを利用して、ウィジェット内にウィジェットを構築します。避けるべきことは、ハンドラーが実際には所有していないグローバル ウィジェットを参照することです。

于 2012-07-15T00:41:43.917 に答える
0

はい、ボタン (または任意のイベント) のハンドラーは、他のトップレベルの任意のウィジェットを変更できます。そのハンドラーがウィジェットへの参照を持っている限り、ハンドラーはそれを変更できます。その点で制限はありません。

于 2012-07-15T12:10:34.747 に答える