J'ai ce code simple, lorsque la touche ESC enfoncée PRINTS, mais il semble exécuter "double" fois au lieu de tirer une seule fois. Python 3.6.2 x86 + PyQt 5,9Python PyQt5 - QEvent Keypress exécute deux fois
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
from PyQt5 import QtCore, QtGui, QtWidgets
class MainWindow(QtWidgets.QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
qApp.installEventFilter(self) #keyboard control
def eventFilter(self, obj, event):
if (event.type() == QtCore.QEvent.KeyPress):
key = event.key()
if key == Qt.Key_Escape:
print("Escape key")
return super(MainWindow, self).eventFilter(obj, event)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
Salut ekhumoro, "et obj est soi" n'a pas aidé. Cependant en ajoutant: "return 1" Semble fonctionner :) – Kiril
@Kiril. Cela fonctionne bien pour moi sur Linux. Peut-être que cela fonctionne différemment sur d'autres plateformes. Le problème avec le retour de '1' (ou' True') est qu'il va "manger" l'événement, et tout comportement par défaut sera beaucoup. Mais peut-être que ce n'est pas un problème dans votre application. – ekhumoro
@Kiril. Juste un intérêt, pouvez-vous montrer la sortie de 'print (" touche d'échappement ", obj)' en utilisant votre exemple original. Je voudrais essayer de corriger ma réponse afin qu'elle fonctionne sur toutes les plateformes. – ekhumoro