SixPy 发表于 2016-7-5 12:04:46

tkinter 如何区分鼠标双击和单击?

tkinter 如何区分鼠标双击和单击?

import tkinter as tk

root=tk.Tk()
l=tk.Label(root,text='鼠标按键测试',width=15,height=5)
l.pack()

n=0
def 单击(event):
    global n
    n+=1
    print('单击',n)

d=0
def 双击(event):
    global d
    d+=1
    print('双击',d)
   
l.bind("<Button-1>",单击)
l.bind("<Double-Button-1>",双击)
root.mainloop()


问题是:在对lable双击鼠标时,总是先触发一次单击,再触发双击事件。

我想要的效果是,双击时只触发 双击事件。如何严格把单双击事件分开?

SixPy 发表于 2016-7-5 12:07:29

版本是 python 3.4.3

~风介~ 发表于 2016-7-5 18:16:24

@小甲鱼

SixPy 发表于 2016-7-6 23:45:36

ding~~~~~~~

SixPy 发表于 2016-7-7 13:12:08

坛里无人啊~

cwag2323 发表于 2016-7-7 14:04:58

定义函数原来还能用中文,真是涨姿势,,,,

冬雪雪冬 发表于 2016-7-7 14:13:36

cwag2323 发表于 2016-7-7 14:04
定义函数原来还能用中文,真是涨姿势,,,,

不仅函数,其他的如变量,对象、模块等都可以用中文。
>>> 中文 = 99
>>> print(中文)
99

SixPy 发表于 2016-7-7 15:17:06

cwag2323 发表于 2016-7-7 14:04
定义函数原来还能用中文,真是涨姿势,,,,

只要是支持unicode的编程工具,都可以用中文表达算法。没什么稀奇的。

中英文只是字符集的区别而已,

SixPy 发表于 2016-7-8 07:36:45

此题无解?

SixPy 发表于 2016-7-12 23:27:48

7天无人能解~
自己想了个办法
用一个 过滤线程 把多次按键动作分辨出来~
import tkinter as tk
import time
import threadingas thd

ClkCnt=
lock = thd.Lock()
lcClk = thd.local()

def 过滤器线程(clk):
    lcClk.clk=clk      
    slp=time.sleep
    tm=time.time
    t=tm()
    while tm()-t<0.3: #按键间隔
      lock.acquire()
      if ClkCnt==0 :
            lock.release()
            return
      if max(ClkCnt)> lcClk.clk :
            ClkCnt=0
            lock.release()
            return
      
      lock.release()
      slp(0.01)

    print('单双叁','击')
    ClkCnt=0
    return

   
def 单(event):
    if ClkCnt==0 :
      ClkCnt=1
      thd.Thread(target=过滤器线程,args=(1,)).start()   

def 双(event):
    if ClkCnt==0 :
      ClkCnt=2
      thd.Thread(target=过滤器线程,args=(2,)).start()
   
def 叁(event):
    if ClkCnt==0 :
      ClkCnt=3
      thd.Thread(target=过滤器线程,args=(3,)).start()   


##------------------
root=tk.Tk()
l=tk.Label(root,text='鼠标按键测试',width=15,height=5)
l.pack()
l.bind("<Button-1>",单)
l.bind("<Double-Button-1>",双)
l.bind("<Triple-Button-1>",叁)
root.mainloop()
页: [1]
查看完整版本: tkinter 如何区分鼠标双击和单击?