Question

Je travaille sur un PyKDE4 / application PyQt4, Autokey , et je remarqué que lorsque j'envoie le programme CTRL + C, l'interruption du clavier n'est pas traitée jusqu'à ce que j'interagir avec l'application, par-à-dire. en cliquant sur un élément de menu ou de changer une case à cocher.

lfaraone@stone:~$ /usr/bin/autokey
^C^C^C
Traceback (most recent call last):
  File "/usr/lib/python2.6/dist-packages/autokey/ui/popupmenu.py", line 113, in on_triggered
    def on_triggered(self):
KeyboardInterrupt
^C^C^C
Traceback (most recent call last):
  File "/usr/lib/python2.6/dist-packages/autokey/ui/configwindow.py", line 423, in mousePressEvent
    def mousePressEvent(self, event):
KeyboardInterrupt

Ceci est malgré ce qui suit dans / usr / bin / autokey:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys
from autokey.autokey import Application

a = Application()
try:
    a.main()
except KeyboardInterrupt:
    a.shutdown()
sys.exit(0)

Pourquoi pas le KeyboardInterrupt pris:

  • quand je délivreraient, plutôt que quand je prends ensuite une action dans l'interface graphique
  • par l'essai initial / sauf clause?

Ubuntu 9.04 avec Python 2.6.

Était-ce utile?

La solution

Essayez de faire ceci:

import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)

avant d'invoquer a.main().

Mise à jour: Rappelez-vous, Ctrl-C peut être utilisé pour la copie dans les applications de l'interface graphique. Il est préférable d'utiliser Ctrl + \ dans Qt, ce qui entraînera la boucle d'événement de mettre fin à l'application et à fermer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top