我正在运行一个将Tkinter
按钮添加到列表的循环。我想使每个按钮都有一个基于单击的特定按钮运行的命令-现在-在raised
和sunken
之间进行切换。
我无法使该命令在特定按钮上运行,无论我实际单击哪个按钮,它始终在按钮列表中的最后一个按钮上运行。
我尝试为每个按钮手动设置命令,但不使用循环(但仍带有列表!),该方法可行,但我需要使用循环。
我还尝试在第一个循环之后创建第二个循环。
def toggle_button(self):
if self['relief'] == 'raised':
self['relief'] = 'sunken'
elif self['relief'] == 'sunken':
self['relief'] = 'raised'
for event in list_of_data:
event_buttons.append(Button(popup, text=event['event name'], relief='raised'))
event_buttons[-1].pack()
# Approach 1
event_buttons[-1].config(command=lambda: toggle_button(event_buttons[-1]))
方法2:
for button in event_buttons:
button.config(command=lambda: toggle_button(button))
我希望event_buttons[0]['command']
是
lambda: toggle_button(event_buttons[0])
event_buttons[1]['command'] = lambda: toggle_button(event_buttons[1])
event_buttons[2]['command'] = lambda: toggle_button(event_buttons[2])
以此类推。
答案 0 :(得分:0)
您需要将实际按钮作为lambda的参数传递:
event_buttons[-1].config(command=lambda button = event_buttons[-1] : toggle_button( button ))