2017-05-16 4 views
0
from tkinter import * 


class SampleClass: 

    def __init__(self, master): 
     frame = Frame(master) 
     frame.pack() 
     self.printButton = Button(master, text = "PrintButton", command=self.printMessage) 
     self.printButton.pack(side = LEFT) 

    def printMessage(self): 
     print("Hulk Smash!") 

root = Tk() 
samp = SampleClass(root) 

root.mainloop() 

Tkinter rootは参照としてクラスに一度だけ渡されます。したがって、ルートが変更されると(ボタンを押す、または入力ウィジェットを使用してテキストを入力する)、の状態が変更されます。 sampクラスは、rootが変更されたことをどのように知っていますか? root.mainloop()メソッドはループ内でrootを呼び出しますが、sampクラスは参照の変更を知らないようです。私はここで何が欠けていますか?Tkinterはクラスで使用するとき、どのようにウィジェットを追跡しますか?

+0

'class' sampが変更の参照を知らないと思われることを理解できません。各ウィジェットは親ウインドウ/ウィジェットを含む 'master'属性を持ち、各ウィジェットはウィジェットのすべての子の辞書を含む' children'属性を持っています。 'samp'クラス内のすべてのウィジェットは、親と子を追跡します。 –

答えて

1

Tkinterは、 "tk"パッケージをロードしたTclインタプリタの周りの薄いラッパーです。ウィジェットを作成すると(例:Frame(master))、これはTclインタプリタにオブジェクトを作成します。マスターウィジェットへの参照を保持するのはTclインタプリタであり、変更に応答するのはTclインタプリタです。

関連する問題