访问tkinter按钮中的文本以在命令中使用

时间:2014-11-11 23:34:57

标签: python button tkinter

我正在TKinter中创建一个键盘。按下按钮应该只打印出该按钮的文本。由于某种原因,每个按钮都会打印出ctrl,这是最后创建的按钮。如何更改它以便实际打印出每个按钮的相应文本?

 def press(key):
     print(key)

 def createWidgets(self):
    for tup in layout.layout:
        for key, value in tup:
            button = Button(self, text=key, command=lambda: self.press(key))
            self.kboard_buttons.append(button)
            button.pack(side="left")

1 个答案:

答案 0 :(得分:2)

当函数被称为时,lambda函数内的表达式被计算,而不是在定义它时。这意味着key in:

command=lambda: self.press(key)

将始终引用for循环中key所持的最后一个值。

您可以通过简单地将key的值作为lambda的默认参数来解决此问题:

command=lambda key=key: self.press(key)

因为在定义函数时会计算默认参数,所以这将确保key内的lambda引用for循环内的key的当前值,而不是最后的价值。