如何运行if语句来确定单击了哪个按钮?我一直在环顾四周,但我是Tkinter的新手,我不太清楚自己应该做些什么。
self.button1 = Tkinter.Button(self,text=u"Convert Decimal to Binary", command=self.OnButtonClick)
self.button1.grid(column=1,row=1)
self.button2 = Tkinter.Button(self,text=u"Convert Binary to Decimal", command=self.OnButtonClick)
self.button2.grid(column=1,row=2)
答案 0 :(得分:5)
您可以将每个按钮的command
选项设置为lambda
,如下所示:
self.button1 = Tkinter.Button(self, ..., command=lambda: self.OnButtonClick(1))
...
self.button2 = Tkinter.Button(self, ..., command=lambda: self.OnButtonClick(2))
然后,让self.OnButtonClick
接受一个将成为按钮“id”的参数。它会是这样的:
def OnButtonClick(self, button_id):
if button_id == 1:
# self.button1 was clicked; do something
elif button_id == 2:
# self.button2 was clicked; do something
答案 1 :(得分:3)
为每个按钮使用不同的回调。
button1 = Tkinter.Button(self, ..., command=self.OnButton1Click)
button2 = Tkinter.Button(self, ..., command=self.OnButton2Click)
答案 2 :(得分:3)
面向对象的方法是只需将点击的按钮传递给OnButtonClick()
方法:
def OnButtonClick(self, button):
# do stuff with button passed...
...
为此,需要分两步创建和配置每个按钮。这是必要的,因为你需要将按钮作为参数传递给命令,这不能在创建按钮本身的同一语句中完成:
button1 = Tkinter.Button(self, text=u"Convert Decimal to Binary")
button1.config(command=lambda button=button1: self.OnButtonClick(button))
button2 = Tkinter.Button(self, text=u"Convert Binary to Decimal")
button2.config(command=lambda button=button2: self.OnButtonClick(button))
答案 3 :(得分:1)
Tkinter不会将任何参数传递给回调 - 所以,你必须将不同的可调用对象传递给每个按钮。
好消息是你不需要实现尽可能多的功能
因为有按钮:你可以创建简短的匿名功能
只需添加信息即可点击哪个按钮
真正的回调。这些匿名函数是使用lambda
关键字创建的
通过填写command
选项
self.button1 = Tkinter.Button(self,text=u"Convert Decimal to Binary", command=lambda: self.OnButtonClick("b1") )
self.button1.grid(column=1,row=1)
self.button2 = Tkinter.Button(self,text=u"Convert Binary to Decimal", command=lambda: self.OnButtonClick("b2") )
self.button2.grid(column=1,row=2)
这样,OnButtonCLick方法将字符串“b1”和“b2”分别作为
调用的第二个参数(第一个参数将是对的引用
对象本身 - self
)
如果要传递对按钮本身的引用,则必须进行配置
在他们创建之后的后续行中他们的command
:
self.button1 = Tkinter.Button(self,text=u"Convert Decimal to Binary")
self.button1["command"] = lambda: self.OnButtonClick(self.button1)
...
答案 4 :(得分:1)
不要使用Button,因为您无法访问Button上显示的Label文本。这是因为按钮的传统tcl实现不包括对用于实现用于实现ttl的Tkinter的按钮上的文本标签的访问。您也无法在构造函数中设置widgetname,因此最多只能获得按钮object._name的唯一十六进制值。
使用一个条目,您可以使用Object
中的本地方法在文本字段中设置和获取字符串Entry.get() # Returns text from Entry object
Entry.insert(0, "text") # Inserts text at index 0, or the beginning
使用bind的新约定
您可以使用bind
绑定任何ttk对象Entry.bind("<Button-1>",self.mouseClickinEntry)
def mouseClickinEntry(self,event)
print(event.widget.get()) # Where widget is the Entry Object from click event
因此,当您单击“条目”文本区域时,将执行mouseClickinEntry,并且您将获得插入它时的“文本”。现在您知道您点击了哪个条目。