Прерывание клавиатуры с помощью python gtk?
Итак, как и в вопросе, я пытаюсь разрешить прерывания клавиатуры, когда выполняется Gtk.main(), однако он просто не замечает, что прерывание клавиатуры происходит до тех пор, пока функция не будет выполнена.
Итак, я попытался приклеить Gtk.main() в отдельном потоке, и основной поток обнаружил, что клавиатурные перехваты и завершают поток, но потом выяснили, что Gtk не играет красиво с потоками, как описано в эта статья
Я не могу думать о другом способе работы клавиатурных прерываний. Возможно ли это?
Я использую python3 и хочу, чтобы моя программа в конечном итоге была кросс-платформой.
Ответы
Ответ 1
из-за https://bugzilla.gnome.org/show_bug.cgi?id=622084 gtk-приложения, написанные с использованием pygobject, не будут закрываться при использовании Ctrl + C на терминале.
чтобы обойти его, вы можете установить обработчик сигнала Unix следующим образом:
if __name__ == '__main__':
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
your_application_main()
Ответ 2
Принятый ответ не будет работать для меня. Я разрешил его, заменив вызов Gtk.main()
на GLib.MainLoop().run()
, как описано в отчете об ошибке .
Ответ 3
У меня также возникли проблемы при использовании сигнального модуля для переопределения обработчика SIGINT (100% -ный процессор в потоке python); альтернативой для меня было следующее:
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()