Python Tkinter - 具有相同验证的多个输入框

时间:2015-10-09 14:29:25

标签: python tkinter tk tkinter-entry

我创建了大约5个Entry框并将它们绑定。以此为模型:

def makeEntry(self, master, data):
    self.entry = Entry(master, width=8, textvariable=data)
    self.entry.bind("<Leave>", lambda event, value=data: self.validate(event, value))

现在,我还做了一个验证方法,检查输入是否为字符串(如果是,则条目的高亮背景将变为红色)。仍然花费我很多时间的问题是我需要该方法应该能够检查每个条目,并且如果它们中的至少一个具有红色背景,则应该禁用最终按钮({{ 1}})。

只需一个条目就可以轻松实现,我只需检查背景是否为红色(button.configure(state=DISABLED)),但是如果有更多条目呢?

1 个答案:

答案 0 :(得分:0)

如果要检查所有条目,请将它们保存在列表中。然后,编写一个迭代列表的函数,并将按钮状态设置为禁用,如果任何窗口小部件具有红色背景。然后,无论何时发生更改,您都可以调用此方法,例如在每个小部件的验证功能中。

示例:

class Example(...):
    def __init__(...):
        self.entries = []
        for data in ("one","two","three"):
            entry = makeEntry(...)
            self.entries.append(entry)

    def _update_button(self):
        for entry in self.entries:
            if entry.cget("background") == "red":
                self.button.configure(state="disabled")
                return
        self.button.configure(state="normal")

注意:您需要确保makeEntry(...)返回对创建的窗口小部件的引用。

此外,您不必使用makeEntry。您可以根据需要创建小部件。关键是要保存对可以迭代的数据结构中的窗口小部件的引用。小部件的创建方式无关紧要。