23

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

所以我尝试将 Gtk.main() 粘贴在一个单独的线程中,并让主线程找到键盘中断,并终止线程,但后来发现 Gtk 不能很好地与本文所述的线程配合使用

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

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

4

3 回答 3

41

因为https://bugzilla.gnome.org/show_bug.cgi?id=622084Ctrl + C使用 pygobject 编写的 gtk 应用程序在终端上使用时不会自行关闭。

要解决它,您可以像这样安装 Unix 信号处理程序:

if __name__ == '__main__':
    import signal
    signal.signal(signal.SIGINT, signal.SIG_DFL)
    your_application_main()
于 2013-05-10T15:48:49.413 回答
10

接受的答案对我不起作用。如错误报告中所述,我通过将Gtk.main()调用替换为 来解决它。GLib.MainLoop().run()

于 2015-11-20T19:35:39.000 回答
4

在使用信号模块覆盖 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()
于 2015-12-27T20:22:29.743 回答