Python Tkinter Entry验证

时间:2018-03-02 12:06:12

标签: python-3.x tkinter tkinter-entry

我正在使用Tkinter在Python 3.6中编写一个程序,其中一个客户有多个(11)输入字段。我希望这些输入字段只接受整数,并且能够定义最大字符数。

我已经有了这样做的功能。但此功能仅适用于一个输入字段。我已经尝试通过调用函数来输入变量,因此它会更改另一个输入字段。我无法做到这一点。

这是我使用的1个输入字段的功能。

    def limitMuntgeld(self, *args):
        value = self.invoerM.get()
        if len(value) > 5:
            self.invoerM.set(value[:5])
        if value.lower() in "abcdefghijklmnopqrstuvwxyz-=[];/":
            self.invoerM.set(value[:0])

这是使用函数

的示例输入字段代码
self.invoerMuntgeld = Entry(self, font=('Arial', 14), textvariable=self.invoerM)

这与下面发布的输入字段上的跟踪相结合。

self.invoerM = StringVar()
self.invoerM.trace('w', self.limitMuntgeld)

我也尝试过vcmd和validatecommand。但是,没有好结果。 我的endresult将是一个与所有输入字段一起使用的函数。如果有人有任何建议,我全都听见了!

1 个答案:

答案 0 :(得分:1)

进行条目验证的正确方法是使用getClass()选项,而不是使用validatecommand。通过小部件内置的验证功能,您不需要对小部件本身的引用(尽管您可以根据需要使用它)。

运行trace时,如果输入有效,则可以传递新值。您只需要检查此值,然后返回validatecommandTrue,而无需知道它适用于哪个小部件。

例如:

False

有关import tkinter as tk def validate_input(new_value): valid = new_value .isdigit() and len(new_value) <= 5 return valid root = tk.Tk() validate = root.register(validate_input) for i in range(10): entry = tk.Entry(root, validate="key", validatecommand=(validate, "%P")) entry.pack(side="top", fill="x") root.mainloop() 表示的内容以及可用作命令参数的其他信息,请参阅此问题:Interactively validating Entry widget content in tkinter