我正在使用 tkinter 中两个框架之间切换 的代码来制作我的 GUI。我有一个带有刷新和重启按钮的框架。
我最初的想法是让重启按钮转到开始页面,如下面的代码所示,但如果再次调用此框架,它仍然会显示上一次尝试的条目。
我已经为刷新按钮尝试了 .destroy() 但是当我再次调用 PLG 框架时我收到了一条回溯消息。
对于重启按钮,我将如何关闭 PLG 框架,转到开始页面,然后再次选择 PLG?
对于刷新按钮,我将如何删除条目小部件中的条目和文本拖欠,以便可以进行另一个条目并返回新的答案?
class PLG(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
label = tk.Label(self, text="Enter the engine size (cc) below", font=controller.title_font)
label.pack(side="top", fill="x", pady=10)
vcmd = (self.register(self.onValidate), '%S')
self.weight_entry = tk.Entry(self, validate='key', vcmd = vcmd)
self.weight_entry.pack(pady = 10)
tk.Button(self, text='Click here to display price', command=self.show_option).pack()
self.text = tk.Text(self)
self.text.pack(pady = 10)
self.text.config(state='disabled')
restart_button = tk.Button(self, text="Restart",
command=self.restart)
restart_button.pack()
refresh_button = tk.Button(self, text="Refresh", command=self.refresh).pack()
refresh_button.pack()
def onValidate(self,S):
if S in ['0','1','2', '3', '4', '5', '6', '7', '8', '9']:
return True
else:
self.bell() # adds a sound effect to error
self.text.delete(1.0, tk.END) # deletes the error message if valid entry provided
self.text.insert(tk.END, "Invalid entry. Please try again.") # displays an error message if a number not provided in entry widget
return False
def restart(self):
self.refresh()
show_frame("StartPage")
def refresh(self):
self.text.config(state='normal')
self.weight_entry.delete(0,tk.END)
self.text.delete("1.0", "end")
对这两个要素的建议将不胜感激。
原文由 bagpuss 发布,翻译遵循 CC BY-SA 4.0 许可协议
第一步是让您的按钮调用适当的函数,而不是使用
lambda
。除非您了解为什么以及何时使用lambda
,否则它通常只会使代码更难编写和理解。一旦你让它调用一个函数,你就可以使用该函数来清除条目。
例子: