所以,我知道必须有一种方法可以做到这一点,我真的一整天都在努力寻找解决方案,这是我最接近它的方法。代码有效,但缺点是它永远不会到达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")
答案 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()