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

发布于 2021-01-29 14:56:31

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

关注者
0
被浏览
126
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    来自新闻组:

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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看