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

时间:2013-04-08 10:27:56

标签: class python-3.x tkinter int

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

由于

1 个答案:

答案 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