我创建了大约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)
),但是如果有更多条目呢?
答案 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
。您可以根据需要创建小部件。关键是要保存对可以迭代的数据结构中的窗口小部件的引用。小部件的创建方式无关紧要。