2014-12-03 738 views
2

我想綁定我的鼠標雙擊功能,現在只是在Tkinter列表框中打印當前選擇。要清除該功能,只應在用戶雙擊Tkinter列表框中的某個項目時打印。我應該使用什麼事件綁定?Tkinter綁定鼠標雙擊

回答

6

您可以綁定到<Double-Button-1>

widget.bind('<Double-Button-1>', handler) 

還有<Button-1>正常鼠標點擊和<Triple-Button-1>三合爲一的鼠標點擊。

有關Tkinter中綁定的更多信息,請參閱Events and Bindings

0

您必須認識到,所有小部件都有一個層次結構,這意味着對於您單擊的每個小部件而言,可能有多個綁定。如果您不覆蓋默認操作,則會從最低級別(如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(事件)是抓住事件牽着你輸入的字符,然後輸出一個星號進輸入,而不是自定義處理程序。但是,如果您在處理程序的末尾沒有使用return "break",則Entry小部件仍然會看到您不想顯示的字符,因爲一旦您的處理程序完成插入星號,默認處理程序將簡單地插入類型化的字符(就像通常那樣)。但是,如果您執行return 'break',則不會調用默認處理程序,並且鍵入的字符不會出現在Entry中。