在tkinter中单击按钮后,处理返回按钮文本的方法

时间:2011-06-01 02:43:54

标签: python button tkinter

我正在尝试创建一个使用此lambda函数单击的按钮列表:

button1.config(command=(lambda x: (clicked.append(x)))(button1.cget("text")))

它似乎有点工作,但它立即打印按钮文本,即它不等待用户点击按钮。

有关如何使其响应按钮点击的任何想法?

class GraphicsInterface:

    def __init__(self):
        self.window = Tk()
        self.window.geometry("720x500")

        clicked=[]
        button1 = Button(self.window, text="Dice 1", width=13)
        button1.place(x=60, y=160)

        button1.config(command=(lambda x: (clicked.append(x)))(button1.cget("text")))

        print(clicked)

2 个答案:

答案 0 :(得分:1)

一种方法是将按钮单击事件绑定到将文本附加到clicked列表的函数。例如,

    self.clicked=[]

    self.button1 = Button(self.window, text="Dice 1", width=13)
    self.button1.place(x=60, y=160)
    self.button1.bind("<Button-1>",self.callback)


def callback(self,event):
    self.clicked.append(event.widget.cget("text"))

然后,您可以添加其他也会调用callback的按钮,并通过event参数获取其文字。

答案 1 :(得分:1)

尝试在lambda中完成所有这些是错误的方法。如果不是不可能做到你想要的东西,那太简单了。相反,创建一个完成工作的方法,并仅使用lambda作为调用该函数的方法:

from Tkinter import *
class GraphicsInterface:

    def __init__(self):
        self.window = Tk()
        self.window.geometry("720x500")

        self.clicked=[]
        button1 = Button(self.window, text="Dice 1", width=13)
        button2 = Button(self.window, text="Dice 2", width=13)
        button1.pack()
        button2.pack()

        button1.configure(command=lambda btn=button1: self.OnClick(btn))
        button2.configure(command=lambda btn=button2: self.OnClick(btn))

        self.window.mainloop()

    def OnClick(self, btn):
        text = btn.cget("text")
        self.clicked.append(text)
        print "clicked:", self.clicked

app = GraphicsInterface()