tkinter keyboard interrupt isn't handled until tkinter frame is raised

半世苍凉 提交于 2019-11-29 14:22:44

from the newsgroups:

I'm using Python 1.5 under Redhat Linux 5.0. I'm trying to figure out the best way to trap a SIGINT (or Ctrl-C) when using tkinter. To illustrate the problem I have, do the following ...

-- Build Python-1.5 with tkinter enabled.

-- Go into the Demo/tkinter/guido directory under the Python-1.5 build tree.

-- Type "python imageview.py image-file", where "image-file" is the full pathname of a displayable image.

-- Once the image pops up, make sure that the window focus is held by the xterm window from which the "python ..." command was just now invoked.

-- Hit Ctrl-C.

At this point, nothing happens. The Ctrl-C seems to be ignored. But now ...

-- Without hitting any more keys on the keyboard, set the window focus to the displayed image window.

As soon as that window gets the focus, the Ctrl-C takes effect.

My question is this: is there any way to restructure the "imageview.py" program so that it will respond to SIGINT (Ctrl-C) immediately, without having to set the window focus to the displayed image first?

Thanks in advance for any help you folks can give me.


What you're seeing is caused by the way signal handlers are handled. You're stuck in the Tcl/Tk main loop, and signal handlers are only handled by the Python interpreter. A quick workaround is to use after() to schedule a dummy function to be called once a second or so -- this will make it appear that your signal is handled in a timely manner.

--Guido van Rossum

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!