Tkinter 条目的验证仅运行一次
Validation for Tkinter Entry Runs Only Once
我正在尝试实现一种只接受输入整数的条目的方式,但我正在努力让代码按预期工作。据我了解:
- 条目小部件有一个参数
validate
,用于选择何时进行验证。
- 参数
validatecommand
决定如何限制数据
- 当验证等于 'key' 时,每次击键时,都会根据
validatecommand
中指定的规则检查条目中的字符串
但是,在尝试此操作后,我遇到了一个问题,即它仅在单击它之前验证条目中的字符串。
from tkinter import*
root = Tk()
def equationpage(root):
vcmd = root.register(validate)
A_str = IntVar()
A_str.set(1)
a = Entry(root,width="2",textvariable=A_str,validate = "key",validatecommand = (vcmd,'%p'))
a.place(x=0,y=0)
def validate(inp):
try:
float(inp)
except:
return False
return True
equationpage(root)
mainloop()
使用上面的代码没有验证发生,它允许我在条目中键入任何内容。如果我更改上面的代码,使条目没有默认值,我最终将无法在条目中键入任何内容,因为它一直拒绝输入。
我该如何解决这个问题?
基于 this answer,此选项没有定义的 Tcl 变量:'%p'
。
替换:
'%p'
包括 大写 P:
'%P'
我正在尝试实现一种只接受输入整数的条目的方式,但我正在努力让代码按预期工作。据我了解:
- 条目小部件有一个参数
validate
,用于选择何时进行验证。 - 参数
validatecommand
决定如何限制数据 - 当验证等于 'key' 时,每次击键时,都会根据
validatecommand
中指定的规则检查条目中的字符串
但是,在尝试此操作后,我遇到了一个问题,即它仅在单击它之前验证条目中的字符串。
from tkinter import*
root = Tk()
def equationpage(root):
vcmd = root.register(validate)
A_str = IntVar()
A_str.set(1)
a = Entry(root,width="2",textvariable=A_str,validate = "key",validatecommand = (vcmd,'%p'))
a.place(x=0,y=0)
def validate(inp):
try:
float(inp)
except:
return False
return True
equationpage(root)
mainloop()
使用上面的代码没有验证发生,它允许我在条目中键入任何内容。如果我更改上面的代码,使条目没有默认值,我最终将无法在条目中键入任何内容,因为它一直拒绝输入。
我该如何解决这个问题?
基于 this answer,此选项没有定义的 Tcl 变量:'%p'
。
替换:
'%p'
包括 大写 P:
'%P'