interruption du clavier avec python gtk?
donc comme le dit la question, j'essaie de laisser les interruptions de clavier se produire pendant que Gtk.main() est en cours, cependant, il ne semble pas remarquer que l'interruption du clavier se produit avant que la fonction ne soit terminée.
alors j'ai essayé de coller Gtk.main () dans un thread séparé, et avoir le thread principal trouver le clavier interupts, et terminer le thread, mais ensuite découvrir que Gtk ne joue pas bien avec les threads comme décrit dans ce l'article
Je ne vois pas d'autre moyen de laisser le clavier interrompre le travail. Est-ce possible?
j'utilise python3, et je veux que mon programme soit éventuellement une plateforme croisée.
3 réponses
à cause de https://bugzilla.gnome.org/show_bug.cgi?id=622084 les applications gtk écrites en utilisant pygobject ne se fermeront pas elles-mêmes en utilisant Ctrl + C sur le terminal.
pour contourner cela, vous pouvez installer un Unix gestionnaire de signal comme ceci:
if __name__ == '__main__':
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
your_application_main()
la réponse acceptée ne fonctionnerait pas pour moi. Je l'ai résolu en remplaçant les Gtk.main()
appel GLib.MainLoop().run()
, comme expliqué dans le rapport de bogue.
j'ai aussi eu des problèmes lors de l'utilisation du module signal pour outrepasser le gestionnaire SIGINT (100% CPU sur le thread python); une alternative pour moi était la suivante:
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()