一尘不染

在提升tkinter帧之前,不会处理tkinter键盘中断

python

我有一个用python +
tkinter编写的GUI应用程序。在我的工作流程中,我通常从命令行启动gui,在gui中做一些事情,然后我发现自己导航到其他终端窗口来做一些工作。不可避免地,我想在某个时候关闭GUI,并且出于习惯,我经常只是导航到启动GUI的终端并发送KeyboardInterrupt(Ctrl-c)。但是,直到我在窗口管理器中举起GUI窗口时,才收到此中断。有谁知道为什么会这样吗?如果gui是在单个函数中启动的,那么有没有简单的解决方法-multiprocessing也许吗?


阅读 220

收藏
2021-01-20

共1个答案

一尘不染

来自新闻组:

我在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)

2021-01-20