Manipulation KeyboardInterrupt dans une application Python KDE?
-
20-09-2019 - |
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.
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.