我正在尝试创建一个使用此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)
答案 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()