Tkinter小部件在被销毁和重建后保持其状态

时间:2016-12-19 13:36:11

标签: python tkinter destroy

我的代码销毁了一些小部件,然后构建了新的小部件,然后在应用程序的最后一个按钮询问我是否想要开始。此按钮将调用类构造函数,该构造函数重新初始化每个变量并开始重新绘制相同的旧窗口小部件。问题是,小部件即使是新的,也会在销毁之前保留其最新值。

def mapping(self):
        sort_frame = Frame(self.top_frame)
        sort_frame.grid(row=0,column=1)
        sort = False
        Checkbutton(sort_frame, text="Sort: ", variable=sort, onvalue=True, offvalue=False,command=lambda fr=sort_option_frame, nx =      next_button : self.enable_sort(fr,nx)).pack(side=TOP)
        next_button = Button(self.bottom_frame, text='Next',borderwidth=1, command=self.output_select)
        next_button.pack( side = RIGHT)

    def output_select(self):
        for widget in self.top_frame.winfo_children():
            widget.destroy()
        for widget in self.bottom_frame.winfo_children():
            widget.destroy()
        #new widgets drawing
        Button(self.bottom_frame, text='New file',borderwidth=1, command=self.restart).pack( side = TOP)

    #This UI resets the application for a new cycle
    def restart(self):
        for widget in self.top_frame.winfo_children():
            widget.destroy()
        for widget in self.bottom_frame.winfo_children():
            widget.destroy()
        self.__init__(self.root)

例如,在此代码中,映射上的Checkbutton将在新周期中回调映射时保留其最新值。

我希望checkbutton是新的,就好像它是第一次创建一样。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您不能对variable属性使用常规变量。它们必须是StringVarIntVarDoubleVarBooleanVar的实例。