繁体   English   中英

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

[英]tkinter keyboard interrupt isn't handled until tkinter frame is raised

我有一个用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 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM