Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 条目tkinter上的验证程序_Python_Python 3.x_Tkinter_Tkinter Entry - Fatal编程技术网

Python 条目tkinter上的验证程序

Python 条目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 <

大家好,我有一个验证器只接受我输入的int

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')