在Linux上使用Python的Tkinter,我试图通过使用KeyboardInterrupt
异常使Ctrl+C停止执行,但是当我按下它时,一段时间内什么也不会发生。最终它“接受”并退出。示例程序:
import sys
from Tkinter import *
try:
root = Tk()
root.mainloop()
except:
print("you pressed control c")
sys.exit(0)
如何让程序反应更快?
在Linux上使用Python的Tkinter,我试图通过使用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()
except:
和except KeyboardInterrupt:
,但都没有起作用。 - Thomas Shields