2016-09-05 13 views
1

最近、私はPython 3のtkinterモジュールを使ってGUIを作成する方法を学びました。残念ながら私のEntryウィジェットは更新されないという問題に悩まされてきました。この問題を理解するために、Entryウィジェットに文字列 'hello'を入力する短いテストケースを書きました。私は方法の面で私の仕事を整理しようとするとtkinterは機能付き入力ボックスを更新しません

class SettingsWindow(): 

    def __init__(self): 
     self.root = tk.Tk() 

     main_frame = ttk.Frame(self.root, padding=(15, 15, 15, 15)) 
     main_frame.grid() 

     start_time = tk.StringVar() 
     start_time_ent = ttk.Entry(main_frame, textvariable=start_time, width=5) 
     start_time.set('hello') 
     start_time_ent.grid() 

     main_frame.mainloop() 

if __name__ == '__main__': 
    app = SettingsWindow() 

問題が発生する:

class SettingsWindow(): 

    def __init__(self): 
     self.root = tk.Tk() 

     main_frame = ttk.Frame(self.root, padding=(15, 15, 15, 15)) 
     main_frame.grid() 

     self.general_settings(main_frame, parent_column=1, parent_row=2) 

     main_frame.mainloop() 

    def general_settings(self, parent_frame, parent_column=0, parent_row=0): 
     start_time = tk.StringVar() 
     start_time_ent = ttk.Entry(parent_frame, textvariable=start_time, width=5) 
     start_time.set('hello') 
     start_time_ent.grid() 

if __name__ == '__main__': 
    app = SettingsWindow() 

私はコードの2番目のバージョン、空のエントリウィジェットとウィンドウのロードを実行すると。私の唯一の推測はなぜ起こるのですか?start_time.set('hello')がいくつかのキューに詰まっていて、ウィンドウをコンパイルするときにコマンドが欠落しています。助言がありますか?

答えて

0

ttkウィジェットは、特にガベージコレクタに敏感です。 start_timeをローカル変数ではなくインスタンス変数にします。

+0

ありがとうございました。あなたはなぜtskウィジェットがとても敏感であるのか知っていますか? – user144153

+0

@ user144153:わかりません。多分それを実装した人は怠惰であるか、それを適切に実装する方法を知らなかったでしょう。あるいは、実際の質問は、通常のtkinterウィジェットがガベージコレクタに対して敏感でない理由です。 –

関連する問題