【发布时间】:2018-06-24 16:19:22
【问题描述】:
我有一个 tkinter 按钮列表,它们创建一个对话窗口并允许用户输入文本,这将是按钮的新文本。但是我似乎无法弄清楚如何让每个按钮自行更新。我的代码如下
myButtons = []
timeSlots = []
while startH < endH:
timeSlots.append(str(startH) + ":00")
timeSlots.append(str(startH) + ":15")
timeSlots.append(str(startH) + ":30")
timeSlots.append(str(startH) + ":45")
startH += 1
for x in range(len(timeSlots)):
Label(frame, text=timeSlots[x]).grid(row=x, column=0)
z = Button(frame, text="Nothing Scheduled", command=lambda: dialogMain(myButtons[x]))
z.grid(row=x, column=1)
myButtons.append(z)
对 dialogMain 的调用打开了用户输入文本的窗口,参数是它要更新的按钮。当然,问题在于,虽然所有按钮都出现在正确的位置,但当我单击任何按钮时,它只会更新最后一个,即 x 的当前值。是否可以只存储 x 的值,而不是指向 x 的指针,我认为这是问题所在
command=lambda: dialogMain(myButtons[x])。我尝试添加一个仅接收 x 的辅助函数,将其分配给一个新变量并将其作为对 dialogMain 的命令调用中的索引返回,但似乎在单击按钮之前不会调用该函数,让我一样的问题。如果有一种方法可以引用按钮本身也可以,并且我已经尝试过类似下面的代码,但它仍然只更新最后一个按钮。
z = Button(frame, text="Nothing Scheduled")
z["command"] = lambda: dialogMain(z)
z.grid(row=x, column=1)
myButtons.append(z)
窗口工作正常,看起来像, this,但只会更新底部按钮
【问题讨论】:
标签: python list tkinter reference