键盘中断与python gtk?

时间:2013-05-07 03:43:50

标签: python python-3.x gtk try-catch

就像问题所说的那样,我正试图让Gtk.main()正在进行时发生键盘中断,但是,它似乎没有注意到键盘中断在函数完成之后才会发生

所以我尝试将Gtk.main()放在一个单独的线程中,并让主线程找到键盘中断,并终止线程,但后来发现Gtk不能很好地与线程一起使用,如{{ 3}}

我想不出让键盘中断工作的任何其他方法。这可能吗?

我正在使用python3,并希望我的程序最终能够跨平台。

3 个答案:

答案 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()