Tkinter 小部件在被销毁和重建后保持其状态
Tkinter widget keeps its state after being destroyed and re-built
我的代码销毁了一些小部件,然后构建了新的小部件,然后在应用程序的末尾有一个按钮询问我是否要开始。此按钮将调用 class 构造函数,该构造函数重新初始化每个变量并开始重新绘制相同的旧小部件。问题是小部件即使是新的也会在销毁前保留其最新值。
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)
例如在这段代码中,mapping上的Checkbutton会在新的循环回调mapping时保持最新的值
我希望复选按钮是新的,就好像它是第一次创建的那样。
感谢您的帮助
您不能为 variable
属性使用普通变量。它们需要是 StringVar
、IntVar
、DoubleVar
或 BooleanVar
.
的实例
我的代码销毁了一些小部件,然后构建了新的小部件,然后在应用程序的末尾有一个按钮询问我是否要开始。此按钮将调用 class 构造函数,该构造函数重新初始化每个变量并开始重新绘制相同的旧小部件。问题是小部件即使是新的也会在销毁前保留其最新值。
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)
例如在这段代码中,mapping上的Checkbutton会在新的循环回调mapping时保持最新的值
我希望复选按钮是新的,就好像它是第一次创建的那样。
感谢您的帮助
您不能为 variable
属性使用普通变量。它们需要是 StringVar
、IntVar
、DoubleVar
或 BooleanVar
.