2017-10-05 80 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()会导致你的整个程序冻结而不是仅提供定时事件。 –