如何将两个不同的按钮点击事件绑定到同一个标签,即&#34; <button-1>&#34;和&#34; <双按钮1>&#34;到同一个标签?</double-button1> </button-1>

时间:2014-07-07 00:04:13

标签: python python-2.7 events tkinter

所以,我知道必须有一种方法可以做到这一点,我真的一整天都在努力寻找解决方案,这是我最接近它的方法。代码有效,但缺点是它永远不会到达else if语句,因为语句中的第一个按钮点击始终为True,因此它永远不会到达其他地方。他们是否可以将我的代码的前两个语句合并为一个,因为我相信这会解决它?这是使用tkinter GUI。

    self.label1.bind("<Double-Button-1>",self._two_click)
    self.label1.bind("<Button-1>", self._two_click)

def  _two_click(self,event):
    if self.label1.bind("<Button-1>"):
        self.label1.configure(self.my_timeBB())
    elif self.label1.bind("<Double-Button-1>"):
        self.label1.configure(text="Blue")

1 个答案:

答案 0 :(得分:0)

我在函数中使用额外的参数来识别click。

BTW:您始终可以将<Button-1><Double-Button1>绑定到一个小部件但具有不同的功能?

import Tkinter as tk

def test(event, extra=None):
    print extra

master = tk.Tk()

b1 = tk.Button(master, text="QUIT", command=master.destroy, width=20, heigh=5)
b1.pack()

b2 = tk.Label(master, text="OK", width=20, heigh=5)
b2.pack()

b2.bind('<Double-Button-1>', lambda event:test(event,101))

b2.bind('<Button-1>', lambda event:test(event,1))
b2.bind('<Button-2>', lambda event:test(event,2))
b2.bind('<Button-3>', lambda event:test(event,3))

master.mainloop()

但我看到一个(大)问题 - 当我尝试用鼠标双击时,我总是得到两个文本 - 首先是单击,第二个是双击。

唯一的解决方案是测量点击之间的时间,并决定是选择单击还是双击。但可能它也需要使用after()


修改

只运行单个或双重clik

import Tkinter as tk

#----------------------------------------------------------------------

single = False

def test(event, extra=None):
    global single

    #print 'event-num:', event.num
    #print 'extra:', extra

    if extra == 1:
        single = True
        master.after(200, single_click)
    elif extra == 101:
        single = False
        click('double click')

def single_click():
    global single

    if single:
        single = False
        click('single click')

def click(msg):
    print 'It was', msg

#----------------------------------------------------------------------

master = tk.Tk()

b1 = tk.Button(master, text="QUIT", command=master.destroy, width=20, heigh=5)
b1.pack()

b2 = tk.Label(master, text="OK", width=20, heigh=5)
b2.pack()

b2.bind('<Double-Button-1>', lambda event:test(event,101))
b2.bind('<Button-1>', lambda event:test(event,1))

master.mainloop()