在Tkinter Python中定义下拉列表的按下按钮

-1 投票
1 回答
1504 浏览
提问于 2025-04-19 15:57

我用Python的Tkinter库创建了一个下拉列表,使用的是Menubutton,但我无法判断是哪个按钮被按下了('button-1'、'button-2'还是'button-3')。

from Tkinter import *

widget = Frame()
widget.pack()

btnMenu = Menubutton(widget, text='Select action')
contentMenu = Menu(btnMenu)
btnMenu.config(menu=contentMenu)
btnMenu.pack()

btnList = ['button-1', 'button-2', 'button-3']
for btn in btnList:
    contentMenu.add_command(label=btn, command=???)

mainloop()

我应该在字符串中“command=”后面用什么来定义特定的按钮呢?谢谢!

contentMenu.add_command(label=btn, command=???)

1 个回答

1

你要找的是“lambda”。你可以在命令调用中这样使用lambda:

contentMenu.add_command(label=btn, command = lambda btn=btn: buttonClicked(btn))

然后你需要创建一个叫做 buttonClicked 的方法,这个方法会接收一个参数,用来表示哪个按钮被按下了。下面是一个简单的例子:

def buttonClicked(btn):
    print btn

不过,理想情况下,如果每个按钮的执行指令完全不同,那么每个按钮应该有自己的方法。你可以把按钮的列表改成一个包含(名称,方法)的元组。这通常是选择使用菜单按钮而不是选项菜单的原因。如果你只是对所有按钮调用同一个方法,那你可能要考虑换成选项菜单。

撰写回答