2017-10-05 77 views
0

當用戶雙擊文本小部件中的單詞時,將調用一些內部回調,這會導致選擇一個單詞。我想要對這個詞做一些額外的任務。我怎樣才能做到這一點?天真的想法是將我自己的回調綁定到雙擊。它沒有工作,因爲錯誤的優先級:我的回調首先被執行,在選擇該單詞之前,並且之後調用了文本回調。 我該如何解決這個問題?Tkinter文本:用雙擊選中的單詞調用自定義函數

的想法是一個把手retreive現有的回調並重新使用它之後:

actual_callback = **<how can I get this handle?>**  
text.bind("<Double-Button-1>", my_callback) 

然後我的回調會直截了當地寫出如下:

def my_callback(event): 
    actual_callback(event) # this will select the word 
    w = text.selection_get() 
    do_something(w) 

請幫助定稿本方式,或隨意提出一個更好的方式來達到我原來的目標。

回答

3

簡單的答案就是在運行回調之前等待一個節拍。

text.bind("<Double-Button-1>", lambda e: text.after(2, my_callback, e)) # wait 2 ms before running callback 
+0

哇。我很佩服。我不知道這個Text.after方法。它的工作非常完美。謝謝。 – quickbug

+0

我認爲'text.after(0,my_callback,e)'也可以。它應該在當前點擊事件完成後將回調分配給下一個事件。我也認爲你可能有一個錯字:'wait a beat' –

+0

@quickbug'after()'方法是你在tkinter中執行任何定時動作的方式,因爲wait()和sleep()會導致你的整個程序凍結而不是僅提供定時事件。 –