【问题标题】:Tkinter Text: calling a custom function with the word selected by double-clickTkinter Text:通过双击选择的单词调用自定义函数
【发布时间】:2018-03-17 09:20:47
【问题描述】:

当用户在文本小部件中双击一个单词时,会调用一些内部回调,从而选择一个单词。我想对这个词做一些额外的任务。我怎样才能做到这一点?天真的想法是将我自己的回调绑定到双击。由于优先级错误,它不起作用:我的回调首先执行,在选择单词之前,然后调用 Text 回调。 我该如何解决?

一个想法是检索现有回调的句柄并在之后重用它:

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)

请帮助以这种方式完成它,或者随意提出实现我最初目标的更好方法。

【问题讨论】:

    标签: python tkinter callback text-widget


    【解决方案1】:

    简单的答案是在运行回调之前稍等片刻。

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

    【讨论】:

    • 哇。我很佩服。我不知道这个 Text.after 方法。它完美地工作。谢谢。
    • 我认为text.after(0, my_callback, e) 也可以。它应该在当前点击事件完成后将回调分配给下一个事件。我也认为您可能有错字:wait a beat
    • @quickbug after() 方法是您在 tkinter 中执行任何定时操作的方式,因为 wait()sleep() 将导致您的整个程序冻结,而不仅仅是提供定时事件。
    • 感谢您的启发。顺便说一句,我更改了帖子的标题以反映 Novel 给出的解决方案。希望它会帮助其他有相同需求的人重定向到这篇文章。
    • @quickbug 所有 tkinter 小部件都有一个 after 方法。
    猜你喜欢
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-30
    • 1970-01-01
    相关资源
    最近更新 更多