我想使用 tkinter 檢測長滑鼠單擊。我怎樣才能做到這一點?<Button-1>根本沒有幫助。
uj5u.com熱心網友回復:
<ButtonPress-1>您可以為按鈕按下 ( ) 和按鈕釋放 ( )創建系結<ButtonRelease-1>。保存按下發生的時間,然后計算發布發生時的延遲。
或者,根據“檢測”的含義,您可以安排在單擊按鈕時運行作業,然后如果在超時之前釋放按鈕,則取消作業。
uj5u.com熱心網友回復:
這是演示如何“檢測”何時發生長滑鼠單擊的代碼(@Bryan Oakley 提到的第二件事)。它通過將各種回呼函式“系結”到不同tkinter的事件來完成這一壯舉,包括我組成的一個虛擬事件,名為'<<LongClick-1>>'.
它將顯示一個視窗,其中包含一個Label指示滑鼠單擊狀態的視窗。如果單擊并按住滑鼠按鈕足夠長的時間(2 秒),on_long_click()事件處理函式將呼叫并Label相應地更改文本。
import tkinter as tk
from tkinter.constants import *
from time import perf_counter as cur_time
LONG_CLICK = 2.0 # Seconds.
start_time = None
timer = None
CHECKS_PER_SECOND = 100 # Frequency that a check for a long click is made.
root = tk.Tk()
root.geometry('100x100')
def on_button_down(event):
global start_time, timer
label.config(text='Click detected')
start_time = cur_time()
timing = True
timer = check_time()
def check_time():
global timer
if (cur_time() - start_time) < LONG_CLICK:
delay = 1000 // CHECKS_PER_SECOND # Determine millisecond delay.
timer = root.after(delay, check_time) # Check again after delay.
else:
root.event_generate('<<LongClick-1>>')
root.after_cancel(timer)
timer = None
def on_button_up(event):
global timer
if timer:
root.after_cancel(timer)
timer = None
label.config(text='Waiting')
def on_long_click(event):
label.config(text='Long click detected')
label = tk.Label(root, text='Waiting')
label.pack(fill=BOTH, expand=1)
root.bind('<ButtonPress-1>', on_button_down)
root.bind('<ButtonRelease-1>', on_button_up)
root.bind('<<LongClick-1>>', on_long_click)
root.mainloop()
雖然它不是特別令人興奮,但這是它運行的螢屏截圖:

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/475793.html
上一篇:Tkinter不顯示折線圖
