我有一个用python + tkinter编写的GUI应用程序。在我的工作流程中,我通常从命令行启动gui,在gui中做一些事情,然后我发现自己导航到其他终端窗口来做一些工作。不可避免地,我想在某个时候关闭GUI,并且出于习惯,我经常只是导航到启动GUI的终端并发送KeyboardInterrupt(Ctrl-c)。但是,直到我在窗口管理器中举起GUI窗口时,才收到此中断。有谁知道为什么会这样吗?如果gui是在单个函数中启动的,那么有没有简单的解决方法-multiprocessing也许吗?
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 image-file”,其中“ image-file”是可显示图像的完整路径名。
-弹出图像后,请确保xterm窗口保持了窗口焦点,xterm窗口刚刚从该窗口中调用了“ python …”命令。
-按Ctrl-C。
此时,什么也没有发生。Ctrl-C似乎被忽略了。但现在 …
-无需再按键盘上的任何键,而是将窗口焦点设置为显示的图像窗口。
该窗口一获得焦点,Ctrl-C就会生效。
我的问题是:是否可以重组“ imageview.py”程序,使其立即响应SIGINT(Ctrl-C),而不必首先将窗口焦点设置为显示的图像?
在此先感谢您提供的任何帮助。
您所看到的是由信号处理程序的处理方式引起的。您陷入了Tcl / Tk主循环,并且信号处理程序仅由Python解释器处理。一个快速的解决方法是使用after()安排一个虚拟函数每秒调用一次-这 似乎 使您的信号得到及时处理。
-圭多·范罗苏姆(Guido van Rossum)