我已经在我的tkinter条目小部件中添加了验证,只允许使用数字。我已经添加了代码,我认为这也允许条目小部件为空以启用我的刷新和重启功能。
当按下restart或referh按钮时,我想要清除条目小部件和文本区域。目前只有文本区域正在清除。数字保留在条目小部件中。建议修改我的代码将不胜感激。
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
...
vcmd = (self.register(self.onValidate), '%S')
self.weight_entry = tk.Entry(self, validate='key', vcmd = vcmd)
self.weight_entry.pack(pady = 10)
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)
Refresh_button = tk.Button(self, text="Refresh", command=self.refresh)
...
# Code below adds validation to the Entry widget so only numbers can be entered
def onValidate(self,s):
if (self.weight_entry ==""):"""Not sure if this is correct. Taken from another answer on SO."""
return True
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
return False
def restart(self):
self.refresh()
self.controller.show_frame("StartPage")
def refresh(self):
self.weight_entry.delete(0,tk.END)
self.text.config(state='normal')
self.text.delete("1.0", "end")
self.text.config(state='disabled')
答案 0 :(得分:1)
您无法删除条目的全部内容的原因是因为onValidate
您希望s
为单个数字,但如果您的条目包含'123',则致电{{ 1}},然后delete(0, "end")
='123'所以s
返回False。
要解决此问题,您可以执行以下操作:
onValidate