2017-11-22 3 views
1

テキストウィジェットで書込みを停止するときに関数を実行したい。だから私はバインドメソッドを使用しますが、私は何をしなければならないのかイベントを見つけました! tkinterで書込みを停止したときのテキストウィジェット内のイベント

はあなたの助けをありがとう);

from tkinter import * 
from tkinter import ttk 

main = Tk() 
main.resizable(width=False, height=False) 
main.title("Test") 
main.geometry("700x255") 

entry = Text(main, wrap=WORD, relief=FLAT, font=helv36, padx=14, pady=15) 
entry.place(x='20', y='50') 

entry2 = Text(main, width=34, height=9, wrap=WORD, state=DISABLED, relief=FLAT, font=helv36, padx=14, pady=15) 
entry2.place(x='380', y='50') 


def traduire(event): 
    contents = entry.get(1.0, END) 
     entry2.config(state=NORMAL) 
     entry2.delete(1.0, END) 
     if var.get() == "Détecter la langue": 
      auto = translator.detect(contents) 
      try: 
       result = translator.translate(contents, src=auto.lang, dest=langue[var2.get()]) 
       entry2.insert(END, result.text) 
      except ValueError: 
       pass 
     else: 
      result = translator.translate(contents, src=langue[var.get()], dest=langue[var2.get()]) 
      entry2.insert(END, result.text) 
     entry2.config(state=DISABLED) 


entry.bind('<KeyRelease>', traduire) 

main.mainloop() 

が、関数のtraduireは、私がキーを離したときに実行されるが、私は、テキストを書いて停止したとき、私はこれだけの機能を実行したい:

私はこれを行います!

+0

はあなたが単純なコピー&ペーストの最小作業例を提供することができます:

私の提案は、次のstop_writing関数に<KeyRelease>をバインドするのですか? (https://stackoverflow.com/help/mcve)この方法で、より多くの人々があなたを助けてくれるようになるので、助けてくれる人が増えます。 – NOhs

+0

どうやって「書くのを止めますか? – Nae

+0

テキストを書いてから1秒以内にキーを押していないとき – CodingFR

答えて

0

jasonharperコメントで提案されているように、ユーザーがテキストを書いて停止した後traduire 1Sを実行するための1つの方法はafter_cancelを使用して、別のキーが押された場合は1秒でtraduireの実行をスケジュールし、この実行をキャンセルするafterを使用することです。この方法では、は実際にはユーザーが1のキーを押さなかった場合にのみ実行されます。

stop_writing_id = '' # store id of the scheduled call to traduire 

def stop_writing(event): 
    global stop_writing_id 
    main.after_cancel(stop_writing_id) # cancel previous scheduling of traduire 
    stop_writing_id = main.after(1000, traduire) # wait 1s and execute traduire 
関連する問題