0

我试图限制输入到条目小部件中的数字,因此它必须是 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

谢谢

4

1 回答 1

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
于 2013-04-08T11:08:53.063 回答