当按钮存储在列表中时,如何设置按钮的命令以使其自身运行?

时间:2019-05-21 09:17:18

标签: python tkinter

我正在运行一个将Tkinter按钮添加到列表的循环。我想使每个按钮都有一个基于单击的特定按钮运行的命令-现在-在raisedsunken之间进行切换。 我无法使该命令在特定按钮上运行,无论我实际单击哪个按钮,它始终在按钮列表中的最后一个按钮上运行。

我尝试为每个按钮手动设置命令,但不使用循环(但仍带有列表!),该方法可行,但我需要使用循环。

我还尝试在第一个循环之后创建第二个循环。

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

以此类推。

1 个答案:

答案 0 :(得分:0)

您需要将实际按钮作为lambda的参数传递:

event_buttons[-1].config(command=lambda button = event_buttons[-1] : toggle_button( button ))