Python 条目tkinter上的验证程序
大家好,我有一个验证器只接受我输入的intPython 条目tkinter上的验证程序,python,python-3.x,tkinter,tkinter-entry,Python,Python 3.x,Tkinter,Tkinter Entry,大家好,我有一个验证器只接受我输入的int class Validators: def validate_numbers(self, text): if text == "": return True try: value = int(text) except ValueError: return False return 0 <= value <
class Validators:
def validate_numbers(self, text):
if text == "": return True
try:
value = int(text)
except ValueError:
return False
return 0 <= value <= 99999
def validateNumberEntry(self):
self.vcmd2 = (self.root.register(self.validate_numbers), "%P")
##creating entry
self.my_values_entry = Entry(self.tab1, validate="key",validatecommand=self.vcmd2)
self.my_values_entry.place(relx= 0.05, rely= 0.35, relwidth= 0.12)
类验证程序:
def验证_编号(自身、文本):
如果text==“”:返回True
尝试:
value=int(文本)
除值错误外:
返回错误
返回0您最好使用正则表达式。
重复使用您的验证\u编号
尝试:
重新导入
def验证_编号(文本):
如果text==“”:返回True
尝试:
value=int(文本)
除值错误外:
返回错误
返回0谢谢回复,不知道该怎么办。拿我更新的给你看看它是怎么工作的@Jean-Marc VolleI建议您将编译步骤移到函数外部,只需使用return bool(res)
@Novel不确定您的意思@小说是的,正则表达式编译可以在Validators
类构造中完成,但我不想用一些早期优化“约束”来混淆答案。是否同时允许单个数字、数字、破折号和另一个数字?70000-
有效吗?那么-85000
呢?有些东西可以作为用户类型进行验证,但有些类型的验证需要在用户完成键入后进行。很容易防止输入多个破折号,并且很容易确保第一个字符不是破折号,但是在用户键入时,必须允许类似于70000-
的内容。Hello@BryanOakley 70000-无效-85000无效-仅允许单个数字(如:70000或范围:70000-80000)使用验证函数不能真正使70000-
无效。如果你这样做,你会有非常不高兴的用户。例如,如果他们键入70000
,然后尝试添加-
以形成一个范围,则该范围将被拒绝,因为您说70000-
无效。你的用户不会喜欢的。您需要在编辑时使用允许数字和单连字符的组合,并在用户完成后使用第二次验证。
import re
def validate_numbers(text):
if text == "": return True
try:
value = int(text)
except ValueError:
return False
return 0 <= value <= 99999
def validate_range(text):
pattern = r'(\d+)-(\d+)'
res = re.match(pattern, text)
if res:
return validate_numbers(res.group(1)) and validate_numbers(res.group(2))
else:
return False
assert validate_range('70000-85000')
assert not validate_range('70000-100000')
assert not validate_range('a-100000')