所以就像问题说的那样,我试图让键盘中断在 Gtk.main() 正在进行时发生,但是,直到函数完成之后,它似乎才注意到键盘中断发生。
所以我尝试将 Gtk.main() 粘贴在一个单独的线程中,并让主线程找到键盘中断,并终止线程,但后来发现 Gtk 不能很好地与本文所述的线程配合使用
我想不出任何其他方法可以让键盘中断起作用。这可能吗?
我正在使用 python3,并希望我的程序最终是跨平台的。
所以就像问题说的那样,我试图让键盘中断在 Gtk.main() 正在进行时发生,但是,直到函数完成之后,它似乎才注意到键盘中断发生。
所以我尝试将 Gtk.main() 粘贴在一个单独的线程中,并让主线程找到键盘中断,并终止线程,但后来发现 Gtk 不能很好地与本文所述的线程配合使用
我想不出任何其他方法可以让键盘中断起作用。这可能吗?
我正在使用 python3,并希望我的程序最终是跨平台的。
因为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()
接受的答案对我不起作用。如错误报告中所述,我通过将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()