[英]Tkinter binding mouse double click
我正在嘗試將鼠標雙擊綁定到一個函數,該函數現在只在 Tkinter 列表框中打印當前選擇。 需要明確的是,該函數應該只在用戶雙擊 Tkinter 列表框的項目之一時才打印。 我應該使用什么事件綁定?
您可以綁定到<Double-Button-1>
:
widget.bind('<Double-Button-1>', handler)
還有<Button-1>
用於正常的鼠標點擊和<Triple-Button-1>
用於三重鼠標點擊。
有關 Tkinter 中綁定的更多信息,請參閱事件和綁定。
您必須意識到所有小部件都有一個層次結構,這意味着對於您單擊的每個小部件,多個綁定是可能的。 如果您不覆蓋默認操作,則會調用每個層次結構的默認處理程序,從最低級別(例如您的Listbox
)開始一直到Tk()
或Toplevel()
小部件。 對您來說,由於您只想在單擊列表框項時打印,您可以綁定到列表框小部件,如下所示:
listboxWidget.bind('<Double-Button-1>', listboxWidget_leftclick_handler)
然后,當您輸入def listboxWidget_leftclick_handler(event)
函數時,您不必檢查event.widget
值以查看它是否是您的Listbox
小部件的名稱。 但是您也可以在更高級別進行檢查(將處理程序綁定到更高級別的小部件)並檢查event.widget
以查看單擊了哪個小部件。
另請注意,防止觸發整個事件處理程序層次結構的唯一方法是使用自定義處理程序的return 'break'
,但您通常只需要在以后的處理程序破壞您的自定義處理程序所做的事情時才需要這樣做。
關於默認處理程序的附加信息
我遺漏的另一部分是大多數事件還有一個“默認”處理程序。 如果綁定自己的處理程序,一旦完成,如果不return 'break'
,則接下來將調用默認處理程序。
例如,假設您想將自己的輸入框制作為密碼輸入。 默認情況下,當您在 Entry 具有焦點(這意味着它從鍵盤獲取輸入)時鍵入字母數字字符時,這些字符將出現在Entry
。 您可以綁定:
myEntry.bind('<KeyPress>', passworder)
其中passworder
是您的自定義處理程序,它獲取保存您輸入的字符的事件,然后將星號輸出到Entry
。 但是,如果您不在處理程序的末尾使用return "break"
,則Entry
小部件仍會看到您不想顯示的字符,因為一旦您的處理程序完成插入星號,默認值處理程序將簡單地插入鍵入的字符(就像通常那樣)。 但是,如果您執行return 'break'
,則不會調用默認處理程序,並且輸入的字符不會出現在Entry
。
作為一個附加組件。 為了區分單擊和雙擊之間的操作,將鼠標操作的調用延遲一小段時間以允許設置雙擊標志。 見下面的例子:
from tkinter import *
def mouse_click(event):
''' delay mouse action to allow for double click to occur
'''
aw.after(300, mouse_action, event)
def double_click(event):
''' set the double click status flag
'''
global double_click_flag
double_click_flag = True
def mouse_action(event):
global double_click_flag
if double_click_flag:
print('double mouse click event')
double_click_flag = False
else:
print('single mouse click event')
root = Tk()
aw = Canvas(root, width=200, height=100, bg='grey')
aw.place(x=0, y=0)
double_click_flag = False
aw.bind('<Button-1>', mouse_click) # bind left mouse click
aw.bind('<Double-1>', double_click) # bind double left clicks
aw.mainloop()
我試圖將鼠標雙擊綁定到一個函數,該函數現在僅在Tkinter列表框中打印當前選擇。 為了清楚起見,該功能僅在用戶雙擊Tkinter列表框中的一項時才打印。 我應該使用什么事件綁定?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.