KeyboardInterrupt需要一段时间

时间:2012-12-09 03:01:19

标签: python tkinter keyboardinterrupt

所以我刚开始使用Tkinter在Linux上乱搞Python。我试图通过使用KeyboardInterrupt异常使Cntrl + C停止执行,但是当我按下它时,暂时没有任何反应。最终它“需要”并退出。一点点阅读表明这可能与线程或其他东西有关,但我对这些东西很新,我真的不知道从哪里开始。

#! /usr/bin/python
import sys
from Tkinter import *

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

我不想成为那个只想要快速修复的菜鸟,所以如果你的答案就像指向正确的文档一样简单,那就太棒了。

2 个答案:

答案 0 :(得分:8)

这有点问题,因为在一般情况下,在调用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()

答案 1 :(得分:0)

According to 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()