我有一个简单的Tkinter窗口,从IPython控制台启动(所以不调用mainloop(),如果相关的话)
当我在控制台中按Ctrl + C时,没有任何反应......直到Tkinter窗口执行某些操作,此时它会捕获KeyboardInterrupt并引发错误。
问题是:如何捕获KeyboardInterrupt?似乎无论我在哪里尝试:阻止,已经太晚了......
以下是一个例子:
class App(object):
def __init__(self,):
self.root = tk.Tk()
self.root.bind('<FocusIn>', self.focus_in)
def focus_in(self, event):
print 'I got focus'
在IPython控制台中:
app = App()
现在在控制台中按Ctrl + C.然后单击应用程序窗口......然后敲打:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/lib-tk/Tkinter.py", line 1481, in __call__
def __call__(self, *args):
KeyboardInterrupt
在focus_in中添加'try / except KeyboardInterrupt'块无济于事。
所以?这是一个错误吗? TKinter甚至会看到那个中断吗?我可以在IPython空闲时禁用SIGINT吗? (当然,当它运行一些代码时我仍然想要它...)
答案 0 :(得分:0)
一种方法是在另一个线程中创建一个主循环,它总是在等待KeyboardInterrupt异常,虽然我不知道这是不是很好,但我相信它会解决你的问题。 / p>