如何向Tkinter按钮的回调命令传递参数?

15

我有两个按钮,分别命名为“ButtonA”、“ButtonB”。 如果点击任何一个按钮,我想让程序打印“hello, ButtonA”和“hello, ButtonB”。 我的代码如下:

def sayHi(name):
    print 'hello,', name

root = Tk()
btna = Button(root, text = 'ButtonA', command = lambda: text)
btna.pack()
当我点击ButtonA时,会出现错误:text not defined。 我理解这个错误,但是我该如何将ButtonA的文本传递给lambda函数?

2
可能是在Python Tkinter按钮命令中传递参数的重复问题。另一个是5小时前由另一个用户提出的。真是巧合! - Ciro Santilli OurBigBook.com
2个回答

29

这应该可以工作:

...
btnaText='ButtonA'
btna = Button(root, text = btnaText, command = lambda: sayHi(btnaText))
btna.pack()

想要了解更多,请查看Tkinter回调函数


我需要使用 lambda: self.MyFunction(MyParam) 调用我的函数,不确定是否值得进行编辑? - WhatsThePoint

3

在您的情况下,text不是一个函数。请将其更改为:

value = 'ButtonA'
btna = Button(root, text = value, command = lambda: sayHi(value))

你会让它工作的。


这个答案并没有展示如何像问题所要求的那样打印“hello,<按钮名称>”。 - Bryan Oakley
好的,我没有完全阅读问题。你只需要在发送之前定义文本值并将其发送到lambda回调函数中。 - Senthil Kumaran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接