python gtk的键盘中断?
正如问题所说,我试图让键盘中断发生在Gtk.main()正在进行时,但是,它似乎没有注意到键盘中断发生在函数完成之后 因此,我尝试将Gtk.main()粘贴到一个单独的线程中,让主线程找到键盘中断,并终止线程,但随后发现Gtk不能像中所述很好地处理线程 我想不出任何其他方法可以让键盘中断工作。这可能吗 我正在使用python3,希望我的程序最终能够跨平台。因为使用pygobject编写的gtk应用程序在终端上使用Ctrl+C时不会自动关闭 要解决此问题,可以安装Unix信号处理程序,如下所示:python gtk的键盘中断?,python,python-3.x,gtk,try-catch,Python,Python 3.x,Gtk,Try Catch,正如问题所说,我试图让键盘中断发生在Gtk.main()正在进行时,但是,它似乎没有注意到键盘中断发生在函数完成之后 因此,我尝试将Gtk.main()粘贴到一个单独的线程中,让主线程找到键盘中断,并终止线程,但随后发现Gtk不能像中所述很好地处理线程 我想不出任何其他方法可以让键盘中断工作。这可能吗 我正在使用python3,希望我的程序最终能够跨平台。因为使用pygobject编写的gtk应用程序在终端上使用Ctrl+C时不会自动关闭 要解决此问题,可以安装Unix信号处理程序,如下所示:
if __name__ == '__main__':
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
your_application_main()
被接受的答案对我不起作用。我通过将
Gtk.main()
调用替换为GLib.MainLoop().run()
,解决了这个问题,如中所述。在使用信号模块重写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()
你能澄清一下你想要实现的目标吗?您想捕捉像
Ctrl+C
这样的内容吗。如果您在终端中运行程序,然后按ctrl+c,在窗口关闭之前不会发生任何事情。这似乎也适用于libgit2(pygit2)调用,允许UserInterrupt中断低级库调用(我不知道全部细节,我只知道我立即取回shell)