2017-10-05 6 views
0

Wenn der Benutzer ein Wort in einem Text-Widget doppelklickt, wird ein interner Rückruf aufgerufen, was zur Auswahl eines Wortes führt. Ich möchte eine zusätzliche Aufgabe für dieses Wort haben. Wie kann ich das machen? Die naive Idee war, meinen eigenen Callback an den Doppelklick zu binden. Es hat nicht funktioniert, wegen einer falschen Priorität: mein Callback wurde zuerst ausgeführt, bevor das Wort ausgewählt wurde, und der Text Callback wurde danach aufgerufen. Wie kann ich das lösen?Tkinter Text: Aufrufen einer benutzerdefinierten Funktion mit dem durch Doppelklick ausgewählten Wort

wäre eine Idee mit einem Griff an den bestehenden Rückruf retreive und Wiederverwendung nach:

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

dann würde mein Rückruf wie folgt schreiben unkompliziert:

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

Bitte helft sie diese zum Abschluss zu bringen oder fühlen Sie sich frei, einen besseren Weg vorzuschlagen, um mein ursprüngliches Ziel zu erreichen.

Antwort

3

Die einfache Antwort ist, einfach einen Moment warten, bevor Sie Ihren Rückruf ausführen.

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

Wow. Ich bin beeindruckt. Ich kannte diesen Text nach der Methode nicht. Es funktionierte in Perfektion. Vielen Dank. – quickbug

+0

Ich denke 'text.after (0, my_callback, e)' würde genauso gut funktionieren. Es sollte den Rückruf dem nächsten Ereignis zuweisen, nachdem das aktuelle Klickereignis abgeschlossen ist. Ich denke auch, dass Sie einen Tippfehler haben können: 'Warten Sie einen Schlag' –

+0

@quickbug Die' after() 'Methode ist, wie Sie irgendwelche Zeitaktionen in tkinter durchführen, weil' wait() 'und' sleep() 'Ihr gesamtes Programm verursachen Einfrieren anstatt nur ein zeitgesteuertes Ereignis zu liefern. –

Verwandte Themen