在python上,如何确定单击了哪个按钮

时间:2014-01-15 21:20:30

标签: python button tkinter

如何运行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)

5 个答案:

答案 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,并且您将获得插入它时的“文本”。现在您知道您点击了哪个条目。