我对 Tkinter 的 validatecommands 完全不熟悉,但我已经做了一些研究,并希望在一个从一堆条目创建树形图的小部件中实现它。我想限制每个条目,以便用户可以创建从 0 到最高行的数字列表,不包括同一行。因此,例如,第 0 行条目中不能有 0 或 12。到目前为止,我只尝试限制输入与行的值相同,但我无法让它工作。我一定是错误地执行了验证命令。任何帮助将非常感激。import tkinter as tkclass widget: def __init__(self,master): # vcmd = (master.register(self.validate), # '%d', '%i', '%P', '%s', '%S', '%v', '%V', '%W') self.master = master self.entryNumbers = tk.Entry(master,justify = tk.CENTER) self.entryNumbers.insert(0, "5") self.entryNumbers.grid(row = 0,column = 0,columnspan =2,sticky="EW") self.createEntriesButton = tk.Button(master,text = "Create Entries",command = self.createEntries) self.createEntriesButton.grid(row = 1, column = 0,columnspan = 2,sticky="EW") def createEntries(self): self.entryNumbers.grid_forget() self.createEntriesButton.grid_forget() self.entries = [] self.entryLabels = [] vcmd = self.master.register(self.validateEntry) for i in range(int(self.entryNumbers.get())): self.entryLabels.append(tk.Label(self.master,text = "Row {}".format(i))) self.entryLabels[-1].grid(row = i,column = 0) self.entries.append(tk.Entry(self.master, validatecommand=(vcmd,'%P',i))) self.entries[-1].grid(row = i,column = 1) self.addEntriesButton = tk.Button(self.master,text = "Add Entries",command = self.addEntry) self.addEntriesButton.grid(row = i+1, column = 0,columnspan = 2,sticky="EW")另外, vcmd 可以是成员变量吗?我只想初始化一次?
1 回答

大话西游666
TA贡献1817条经验 获得超14个赞
我使用 lambda 函数解决了这个问题:
vcmd = lambda row:(self.master.register(self.validateEntry),'%P',row)
for i in range(int(self.entryNumbers.get())):
self.entryLabels.append(tk.Label(self.master,text = "Row {}".format(i)))
self.entryLabels[-1].grid(row = i,column = 0)
self.entries.append(tk.Entry(self.master, validate = "all", validatecommand=vcmd(i)))
添加回答
举报
0/150
提交
取消