tkinter:键盘中断需要一段时间



在Linux上使用Tkinter和Python,我试图通过使用KeyboardInterrupt异常使Ctrl + C停止执行,但是当我按下它时,有一段时间没有任何反应。最终它"接受"并退出。 示例程序:

import sys
from Tkinter import *
try: 
    root = Tk()
    root.mainloop()
except:
    print("you pressed control c")
    sys.exit(0)

程序如何更快地做出反应?

这有点问题,因为一般来说,在调用 mainloop 方法之后,您依赖于 Tcl 来处理事件。由于您的应用程序什么都不做,因此 Tcl 没有理由对任何事情做出反应,尽管它最终会处理其他事件(正如您所注意到的,这可能需要一些时间)。规避这种情况的一种方法是让 Tcl/Tk 做一些事情,调度人工事件,如下所示:

from Tkinter import Tk
def check():
    root.after(50, check) # 50 stands for 50 ms.
root = Tk()
root.after(50, check)
root.mainloop()

根据Guido van Rossum的说法,这是因为你被困在Tcl/Tk主循环中,而信号处理程序仅由Python解释器处理。

可以通过将 Ctrl-c 绑定到回调函数来解决此问题:

import sys
import Tkinter as tk
def quit(event):
    print "you pressed control c"
    root.quit()
root = tk.Tk()
root.bind('<Control-c>', quit)
root.mainloop()

相关内容

  • 没有找到相关文章

最新更新