2017-10-05 11 views
0

ユーザがテキストウィジェットで単語をダブルクリックすると、内部コールバックが呼び出され、単語が選択されます。私はその言葉でやるべき追加の仕事をしたい。どうやってやるの?素朴なアイデアは、私自身のコールバックをダブルクリックにバインドすることでした。間違った優先順位のために、うまくいきませんでした:私のコールバックが最初に実行され、単語が選択され、Textコールバックが呼び出されました。 どうすれば解決できますか?Tkinter 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) 

それこれを完成させるために助けてください私の元の目標を達成するためのより良い方法を提案することができます。

答えて

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)'も同様に機能すると思います。現在のクリックイベントが終了した後、コールバックを次のイベントに割り当てる必要があります。 –

+0

@quickbug 'after()'メソッドは、 'wait()'と 'sleep()'があなたのプログラム全体を引き起こすため、tkinterの時間指定されたアクションをどのように実行するかです。ちょうど時機を合わせたイベントを提供するのではなく、フリーズします。 –

関連する問題