liststore entry combo python python-3.x gtk try-catch

combo - python gtk entry get text



interrupciĆ³n del teclado con python gtk? (3)

La respuesta aceptada no funcionaría para mí. Lo resolví reemplazando la llamada Gtk.main() con GLib.MainLoop().run() , como se explica en el informe de errores .

Así que, como dice la pregunta, estoy intentando permitir que las interrupciones del teclado ocurran mientras Gtk.main () está en progreso, sin embargo, simplemente no parece notar que la interrupción del teclado ocurre hasta después de que la función está completa.

Así que traté de pegar Gtk.main () en un subproceso separado, hacer que el hilo principal encontrara los interuptores del teclado y terminar el hilo, pero luego descubrí que Gtk no funciona bien con los hilos, como se describe en este artículo.

No puedo pensar en otra forma de dejar que las interrupciones del teclado funcionen. es posible?

Estoy usando python3, y quiero que mi programa eventualmente sea multiplataforma.


También tuve problemas al usar el módulo de señal para anular el controlador SIGINT (100% CPU en el hilo de python); una alternativa para mí fue la siguiente:

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()


debido a https://bugzilla.gnome.org/show_bug.cgi?id=622084 las aplicaciones gtk escritas usando pygobject no se cerrarán cuando se use Ctrl + C en el terminal.

para evitarlo, puede instalar un manejador de señal Unix como este:

if __name__ == ''__main__'': import signal signal.signal(signal.SIGINT, signal.SIG_DFL) your_application_main()