我有一个用python + tkinter编写的GUI应用程序。在我的工作流程中,我通常从命令行启动gui,在gui中做一些事情,然后我发现自己导航到其他终端窗口做一些工作。不可避免地,我想在某个时刻关闭GUI,出于习惯,我经常只是导航到启动GUI并发送KeyboardInterrupt(Ctrl-c)的终端。但是,在我在窗口管理器中引发GUI窗口之前,不会收到此中断。有谁知道为什么会这样?如果gui是在单个函数中启动的,是否有一个简单的解决方法 - multiprocessing
可能吗?
答案 0 :(得分:5)
来自新闻组:
我在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窗口持有“python ...”命令 刚刚被援引。
- 按Ctrl-C。
此时,没有任何反应。 Ctrl-C似乎被忽略了。 但现在......
- 如果不再按键盘上的任何键,请设置窗口 聚焦到显示的图像窗口。
只要该窗口获得焦点,Ctrl-C就会生效。
我的问题是:有没有办法重组 “imageview.py”程序,以便它将响应SIGINT(Ctrl-C) 立即,无需将窗口焦点设置为显示 图像先?
提前感谢大家给我的任何帮助。
您所看到的是信号处理程序的处理方式。 你被困在Tcl / Tk主循环中,信号处理程序只是 由Python解释器处理。一个快速的解决方法是使用 after()调度一次大约一次调用的虚函数 - 这将使显示及时处理您的信号 方式。
- Guido van Rossum