Class Python验证和验证ttk条目小部件的命令问题

Class Python验证和验证ttk条目小部件的命令问题,class,python-3.x,tkinter,int,Class,Python 3.x,Tkinter,Int,我试图限制输入到entry小部件中的数字,因此它必须是4个整数长,介于0000到9999之间,实际上是一个4位的pin码。这个类工作得很好,但是,关于以0开头的数字有一个小问题。如果要输入数字0000,则仅取0,而不是实际值0000。有人能帮我指出我做错了什么吗 class ConstrainedEntry(ttk.Entry): def __init__(self, *args, **kwargs): ttk.Entry.__init__(self, *args, **

我试图限制输入到entry小部件中的数字,因此它必须是4个整数长,介于0000到9999之间,实际上是一个4位的pin码。这个类工作得很好,但是,关于以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
类约束尝试(ttk.Entry):
定义初始化(self,*args,**kwargs):
ttk.Entry.\uuuuu init\uuuuuu(self,*args,**kwargs)
vcmd=(self.register(self.on_validate),“%P”)
self.configure(validate=“key”,validatecommand=vcmd)
def不允许(自我):
self.bell()
def on_validate(自身、新_值):
尝试:
如果new_value.strip()==“”:返回True
值=int(新值)
如果值<0或值>9999:
self.disallow()
返回错误
除值错误外:
self.disallow()
返回错误
返回真值

谢谢

您正在将值转换为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

我不相信这将适用于上面的类,我得到一个错误“模块”对象没有属性“匹配”@user2207573抱歉,这是一个打字错误。函数的名称是我注意到,在我们查看模块之前,这个更改仍然会导致错误发生在delete self.tk.call(self._w,'delete',first,last)_tkinter.TclError:预期的布尔值,但得到了“None”@user2207573我刚刚意识到您正在使用“key”作为验证条件,我将更改我的答案以反映这一点。您得到的错误来自
delete
方法,而不是来自\u validate上的
。是的,但实现上述方法会删除“entry”中的所有函数,我认为这是关键问题?