就像问题所说的那样,我正试图让Gtk.main()正在进行时发生键盘中断,但是,它似乎没有注意到键盘中断在函数完成之后才会发生
所以我尝试将Gtk.main()放在一个单独的线程中,并让主线程找到键盘中断,并终止线程,但后来发现Gtk不能很好地与线程一起使用,如{{ 3}}
我想不出让键盘中断工作的任何其他方法。这可能吗?
我正在使用python3,并希望我的程序最终能够跨平台。
答案 0 :(得分:38)
由于使用pygobject编写的https://bugzilla.gnome.org/show_bug.cgi?id=622084 gtk应用程序在终端上使用 Ctrl + C 时不会自行关闭。
要解决它,你可以像这样安装一个Unix信号处理程序:
if __name__ == '__main__':
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
your_application_main()
答案 1 :(得分:8)
接受的答案对我不起作用。我按照Gtk.main()
替换GLib.MainLoop().run()
来电解决了问题,如bug report中所述。
答案 2 :(得分:3)
使用信号模块覆盖SIGINT处理程序(python线程上的100%CPU)时,我也遇到了麻烦;我的替代方案如下:
def main():
self.mainloop = GObject.MainLoop()
try:
self.mainloop.run()
except KeyboardInterrupt:
logger.info('Ctrl+C hit, quitting')
self.exit()
def exit():
self.mainloop.quit()