tkinter不会用功能更新输入框

时间:2016-09-05 20:33:02

标签: python python-3.x user-interface tkinter

最近,我学习了如何使用Python 3中的tkinter模块创建GUI。不幸的是,我已经陷入了一个问题,即我的Entry小部件不会更新。为了理解这个问题,我写了一个简短的测试用例,用一个字符串' hello'填充Entry小部件。

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

当我运行第二个版本的代码时,窗口会加载一个空的Entry小部件。我唯一猜测为什么会发生这种情况是start_time.set('hello')卡在某个队列中,我在编译窗口时错过了一个命令。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

ttk小部件对垃圾收集器特别敏感。使airodump-ng成为实例变量而不是局部变量。