【发布时间】:2020-11-26 09:42:44
【问题描述】:
我有一个 TKinter 条目小部件,我想在其中验证输入,并且一切都按预期工作。
但是当我设置 Entry 小部件的 StringVariable 时,不再调用验证函数。 有人可以解释一下这种行为吗?
这是我的问题的一个示例,我验证输入是否为数字
import tkinter as tk
class Example(tk.Frame):
def __init__(self, parent):
tk.Frame.__init__(self, parent)
self.var1 = tk.StringVar()
valid_cmd = (self.register(self.on_validate), '%S')
self.entry = tk.Entry(self, textvariable=self.var1, validate="key", validatecommand=valid_cmd)
self.entry.pack(side="top", fill="x")
self.var1.set("25") # comment out this line and validation function works as expected
def on_validate(self, S):
print("in validation function")
if S.isdigit():
return True
else:
return False
if __name__ == "__main__":
root = tk.Tk()
tk.Tk.geometry(root, '200x40')
Example(root).pack(fill="both", expand=True)
root.mainloop()
我希望能够在不丢失验证功能的情况下更改 StringVar 的值(进而更改 Entry Widget 的内容)。
【问题讨论】:
标签: python validation tkinter tkinter-entry