我正在尝试限制输入到条目小部件中的数字,因此它必须是4个整数长,值0000到9999之间,有效地是4位数的引脚号。这个类工作正常,但是,对于以0开头的数字有一个小问题。如果要输入数字0000那么它只取值0而不是实际值0000.有人可以请帮我指出我是什么做错了。
class ConstrainedEntry(ttk.Entry):
def __init__(self, *args, **kwargs):
ttk.Entry.__init__(self, *args, **kwargs)
vcmd = (self.register(self.on_validate),"%P")
self.configure(validate="key", validatecommand=vcmd)
def disallow(self):
self.bell()
def on_validate(self, new_value):
try:
if new_value.strip() == "": return True
value = int(new_value)
if value < 0 or value > 9999:
self.disallow()
return False
except ValueError:
self.disallow()
return False
return True
由于
答案 0 :(得分:1)
您正在将值转换为int:
value = int(new_value)
如果您的最终目的是检查用户是否输入了四位数字,您还可以使用一个非常简单的正则表达式:
import re
def on_validate(self, new_value):
m = re.match(r'^(\d{1,4})?$', new_value)
if m is None:
self.disallow()
return False
else:
return True