Как поймать KeyPressedEvent QDockWidget в pyqt (QGIS) - PullRequest
1 голос
/ 01 апреля 2019

Я пытаюсь добавить немного логики в KeyPressedEvent QDockWidget. Я могу обойтись без QDockWidget, то есть в главном окне, но он не работает с QDockWidget.

Вот что я пробовал:


from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from qgis.core import QgsProject
from .progress_bar import Ui_MainWindow_Progress

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QApplication.translate(context, text, disambig)

class Ui_MainWindow(QMainWindow):

    def __init__(self, iface):
        super().__init__()
        self.iface = iface

    def setupUi(self, MainWindow):

        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(356, 750)

        self.pushButton_exit = QPushButton(MainWindow)
        self.pushButton_exit.setGeometry(QtCore.QRect(290, 0, 50, 23))
        self.pushButton_exit.setObjectName(_fromUtf8("pushButton_exit"))
        self.pushButton_exit.setStyleSheet("background-color: red")

        self.label_4 = QLabel(MainWindow)
        self.label_4.setGeometry(QtCore.QRect(20, 300, 81, 20))
        self.label_4.setObjectName(_fromUtf8("label_4"))

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        self.dock_widget = QDockWidget("My Plugin", self.iface.mainWindow())
        self.dock_widget.setWidget(MainWindow)
        self.dock_widget.setFixedWidth(356)
        self.dock_widget.setFixedHeight(750)
        self.iface.addDockWidget(QtCore.Qt.RightDockWidgetArea, 
        self.dock_widget)
        self.dock_widget.setFeatures(QDockWidget.DockWidgetFloatable |
                                QDockWidget.DockWidgetMovable)
        self.dock_widget.keyPressEvent = self.keyPressed

    def keyPressed(self, event):
        if event.key() == QtCore.Qt.Key_Escape:
            print("Escape pressed")

Код работает нормально, но метод keyPressed не вызывается. Как обрабатывать KeyPressedEvent QDockWidget?

1 Ответ

2 голосов
/ 01 апреля 2019

попробовать:

def keyPressEvent(self, event):
    if event.key() == QtCore.Qt.Key_Escape:
         print("Escape pressed")
...