我有一个用python+tkinter编写的GUI应用程序。在我的工作流程中,我通常从命令行启动gui,在gui中做一些事情,然后我发现自己导航到其他终端窗口来做一些工作。不可避免的是,我想在某个时候关闭GUI,出于习惯,我经常只导航到启动GUI的终端并发送KeyboardInterrupt(Ctrl-c)。但是,直到我在窗口管理器中打开GUI窗口后,才会收到此中断。有人知道为什么会发生这种事吗?如果gui是在一个函数中启动的,有没有一个简单的解决方法——也许是multiprocessing
?
来自新闻组:
我在Redhat Linux 5.0下使用Python 1.5。我在想办法使用tkinter时捕获SIGINT(或Ctrl-C)的最佳方法。到说明我遇到的问题,做以下。。。
--在启用tkinter的情况下构建Python-1.5。
--进入Python-1.5构建树下的Demo/tkinter/guido目录。
--类型";python imageview.py图像文件";,其中";图像文件";是可显示图像的完整路径名。
--一旦图像弹出,确保窗口焦点由xterm窗口保持;python"命令只是现在调用。
--点击Ctrl-C。
在这一点上,什么也没发生。Ctrl-C似乎被忽略了。但是现在
--在不敲击键盘上的任何键的情况下,将窗口焦点设置为显示的图像窗口。
一旦该窗口获得焦点,Ctrl-C就会生效。
我的问题是:有没有办法重组"imageview.py";程序,以便对SIGINT(Ctrl-C)作出响应立即,而不必将窗口焦点设置为显示的图像优先?
提前感谢你们能给我的任何帮助。
----您所看到的是由信号处理程序的处理方式引起的。您被困在Tcl/Tk主循环中,信号处理程序仅由Python解释器处理。一个快速的解决方法是使用after()调度一个伪函数,大约每秒调用一次--这将使您的信号得到及时处理,看起来。--Guido van Rossum