研究在 tkinter 中单击按钮后返回按钮文本的方法

5 python tkinter button

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

button1.config(command=(lambda x: (clicked.append(x)))(button1.cget("text")))
Run Code Online (Sandbox Code Playgroud)

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

关于如何使其响应按钮点击有什么想法吗?

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)
Run Code Online (Sandbox Code Playgroud)

Bry*_*ley 3

尝试在 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()
Run Code Online (Sandbox Code Playgroud)