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

Python Tkinter - Multiple entry box with same validation

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

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))

现在,我还做了一个验证方法来检查输入是否为字符串(如果是,条目的突出显示背景将变为红色)。仍然花费我很多时间的问题是我需要该方法应该能够检查每个条目,并且如果其中至少一个条目有红色背景,那么最后一个按钮应该被禁用(button.configure(state=DISABLED)).

只有一个条目会容易得多,我会简单地检查背景是否为红色 (status = str(self.myOneEntry.cget("highlightbackground"))),但是如果有更多条目呢?

如果您想检查所有条目,请将它们保存在列表中。然后,编写一个遍历列表的函数,如果任何小部件具有红色背景,则将按钮状态设置为禁用。然后,您可以在发生变化时调用它,例如在每个小部件的验证函数中。

示例:

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(...) returns 对创建的小部件的引用。

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