当我停止使用tkinter写时,文本小部件中的事件

时间:2017-11-22 18:24:10

标签: python tkinter

当我停止在文本小部件中书写时,我想执行一个函数。所以我使用bind方法,但我没有找到一个事件去做我必须做的事情!

我这样做:

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是执行但我只想在我停止写文本时执行这个函数;)

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

就像jasonharper在评论中建议的那样,在用户停止写文本后执行traduire 1s的一种方法是使用after来安排在{1}中执行{1}}并取消执行如果按下另一个键,则使用traduire。这样,after_cancel实际上只有在用户没有按任何键1s时才会执行。

我的建议是将traduire绑定到以下<KeyRelease>函数:

stop_writing