【问题标题】:How to pass a value to an entry validatecommand如何将值传递给条目 validatecommand
【发布时间】:2021-01-02 15:17:24
【问题描述】:

我正在使用validatecommand 在 tkinter 中验证表单。有两个条目,一个应该只接受整数,另一个应该接受浮点数。
这是基本代码:

import tkinter as tk
class Form(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        validCmd1 = (self.register(self.val1), "%P")
        validCmd2 = (self.register(self.val2), "%P")
        self.lab1 = tk.Label(self, text = "Float:")
        self.lab1.grid(row = 1, column = 0, padx = 10, pady = 10)
        self.ent1 = tk.Entry(self, validate = "key", validatecommand = validCmd1)
        self.ent1.grid(row = 1, column = 1)
        self.lab2 = tk.Label(self, text = "Integer:")
        self.lab2.grid(row = 2, column = 0, padx = 10, pady = (0,10))
        self.ent2 = tk.Entry(self, validate = "key", validatecommand = validCmd2)
        self.ent2.grid(row = 2, column = 1)
    def val1(self, value):
        try:
            float(value)
        except:
            return False
        else:
            return True
    def val2(self, value):
        try:
            int(value)
        except:
            return False
        else:
            return True
app = Form()
app.mainloop()

我没有为两个非常相似的任务编写两个不同的函数,而是尝试将一个整数传递给验证命令(1 表示浮点数,2 表示整数)。我尝试使用 lambdas 将值传递给验证函数,首先在 self.register 部分:self.register(lambda: self.val1(1)) 但这给了TypeError: <lambda>() takes 0 positional arguments but 1 was given,第二次我尝试在 validatecommand 命令上使用 lambda:validatecommand = lambda: validCmd1(1) 这给了@987654327 @.
是否可以将值传递给验证命令?

【问题讨论】:

  • this 对你有帮助吗

标签: python-3.x validation tkinter


【解决方案1】:

validatecommand 选项采用一个元组,该元组可以包含您想要的任何参数。例如,如果你想传递一个整数,就这么简单:

validCmd1 = (self.register(self.val), 1, "%P")
validCmd2 = (self.register(self.val), 2, "%P")

def val(self, arg, value):
    print(f"val1 arg='{arg}' value='{value}'")
    ...

有时,如果将命令的注册与传递给validatecommand 的值分开,会更容易理解。例如:

vcmd = self.register(self.val)
...
self.ent1 = tk.Entry(..., validatecommand = (vcmd, 1, "%P"))
self.ent2 = tk.Entry(..., validatecommand = (vcmd, 2, "%P"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-14
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    相关资源
    最近更新 更多