التعامل مع KeyboardInterrupt في تطبيق KDE Python؟
-
20-09-2019 - |
سؤال
أنا أعمل على تطبيق PyKDE4/PyQt4، المفتاح التلقائي, ، ولاحظت أنه عندما أرسل للبرنامج CTRL+C، لا تتم معالجة مقاطعة لوحة المفاتيح حتى أتفاعل مع التطبيق، على سبيل المثال.النقر على عنصر القائمة أو تغيير مربع الاختيار.
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
هذا على الرغم من وجود ما يلي في /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)
لماذا لم يتم اكتشاف KeyboardInterrupt:
- عندما أقوم بإصداره، وليس عندما أقوم بعد ذلك باتخاذ إجراء في واجهة المستخدم الرسومية
- بواسطة جملة المحاولة/الاستثناء الأولية؟
تشغيل Ubuntu 9.04 مع Python 2.6.
المحلول
حاول القيام بذلك:
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
قبل الاستدعاء a.main()
.
تحديث: تذكر أنه يمكن استخدام Ctrl-C للنسخ في تطبيقات واجهة المستخدم الرسومية.من الأفضل استخدام Ctrl+\ في Qt، مما سيؤدي إلى إنهاء حلقة الحدث وإغلاق التطبيق.
لا تنتمي إلى StackOverflow