So just like the question says, I\'m trying to let keyboard interrupts happens while Gtk.main() is in progress, however, it just doesn\'t seem to notice that the keyboard in
because of https://bugzilla.gnome.org/show_bug.cgi?id=622084 gtk applications written using pygobject will not close themselves when using Ctrl + C on the terminal.
to work around it, you can install a Unix signal handler like this:
if __name__ == '__main__':
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
your_application_main()
The accepted answer would not work for me. I resolved it by replacing the Gtk.main()
call with GLib.MainLoop().run()
, as explained in the bug report.
I also ran into trouble when using the signal module to override the SIGINT handler (100% CPU on the python thread); an alternative for me was the following:
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()