验证阻止刷新/重启 - tkinter

时间:2017-07-14 08:27:33

标签: python-3.x tkinter

我已经在我的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')

1 个答案:

答案 0 :(得分:1)

您无法删除条目的全部内容的原因是因为onValidate您希望s为单个数字,但如果您的条目包含'123',则致电{{ 1}},然后delete(0, "end") ='123'所以s返回False。

要解决此问题,您可以执行以下操作:

onValidate