在 python 中区分单击和双击
Differentiate between single and double click in python
我正在处理一个著名的 SysTrayIcon 示例,需要同时处理单击和双击。
def notify(self, hwnd, msg, wparam, lparam):
if lparam==win32con.WM_LBUTTONDBLCLK:
self.execute_menu_option(self.default_menu_index + self.FIRST_ID)
elif lparam==win32con.WM_RBUTTONUP:
self.show_menu()
elif lparam==win32con.WM_LBUTTONUP:
pass
return True
我知道这涉及创建一个计时器:
Qt 有 QTimer.singleShot
(example)
PySide 有 QtCore.QTimer
(example)
wx 有 wx.timer
(example)
但是在 "pure" python 中实现它的最佳方法是什么(即只有 ctypes/pywin32,没有 qt、wx 或 gtk)?自己创建线程?或者启动某种 windows 计时器,它会在必要时为我生成 WM_TIMER 消息?
PS 我找到了一个合适的方法来询问 windows 用户对双击时间的偏好 here.
PPS 我也读过一篇关于处理单击和双击有多糟糕的评论 here。
您可以使用 pywin32
的 timer
module。在点击回调中设置双击标志并启动定时器,在定时器回调中清除双击标志,检测到双击后在点击回调中杀死定时器。
启动计时器:
timer_id = set_timer(delay_period, callback)
要停止计时器:
kill_timer(timer_id)
我正在处理一个著名的 SysTrayIcon 示例,需要同时处理单击和双击。
def notify(self, hwnd, msg, wparam, lparam):
if lparam==win32con.WM_LBUTTONDBLCLK:
self.execute_menu_option(self.default_menu_index + self.FIRST_ID)
elif lparam==win32con.WM_RBUTTONUP:
self.show_menu()
elif lparam==win32con.WM_LBUTTONUP:
pass
return True
我知道这涉及创建一个计时器:
Qt 有 QTimer.singleShot (example)
PySide 有 QtCore.QTimer (example)
wx 有 wx.timer (example)
但是在 "pure" python 中实现它的最佳方法是什么(即只有 ctypes/pywin32,没有 qt、wx 或 gtk)?自己创建线程?或者启动某种 windows 计时器,它会在必要时为我生成 WM_TIMER 消息?
PS 我找到了一个合适的方法来询问 windows 用户对双击时间的偏好 here.
PPS 我也读过一篇关于处理单击和双击有多糟糕的评论 here。
您可以使用 pywin32
的 timer
module。在点击回调中设置双击标志并启动定时器,在定时器回调中清除双击标志,检测到双击后在点击回调中杀死定时器。
启动计时器:
timer_id = set_timer(delay_period, callback)
要停止计时器:
kill_timer(timer_id)