研究在 tkinter 中单击按钮后返回按钮文本的方法
Posted
技术标签:
【中文标题】研究在 tkinter 中单击按钮后返回按钮文本的方法【英文标题】:Working on a way to return the text of a button after the button is clicked in tkinter 【发布时间】:2011-09-05 22:41:28 【问题描述】:我正在尝试创建一个使用此 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)
【问题讨论】:
我认为是一模一样,请确认:***.com/questions/6192727/… 【参考方案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
参数获取它们的文本。
【讨论】:
如果您使用键盘调用按钮(使用 tab 将焦点移动到按钮,然后按空格键),这将无法正常工作。【参考方案2】:试图在 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()
【讨论】:
啊,是的,效果很好。但是,您能解释一下为什么需要 lambda 吗?例如,我尝试了 button1.configure(command=self.OnClick(button1)) 导致与以前相同的问题。为什么它在用户点击之前调用了这里的函数?另外,我一般对 lambda 不是很熟悉……你能具体解释一下“lambda btn=button1”的语法吗? @sq1020: lamda 是必要的,因为没有它,或者像functools.partial
这样的东西,就无法将参数传递给回调。这是因为必须为 command
选项提供对函数的引用。 lambda
方便地返回匿名函数的句柄。当您执行command=self.OnClick(button1)
时,您要求python 运行命令self.OnClick(button1)
并将其结果用作command
属性的值。以上是关于研究在 tkinter 中单击按钮后返回按钮文本的方法的主要内容,如果未能解决你的问题,请参考以下文章
如何通过单击tkinter中不同窗口中的按钮来获取位于窗口中的GUI文本字段的参数? [重复]
Python3 tkinter基础 Button command 单击按钮 在console中打印文本
单击后更新按钮的位置? (Tkinter Python GUI)