I am trying to add some logic at KeyPressedEvent of a QDockWidget. It works without the QDockWidget, i.e., on the main window, but it does not work on the QDockWidget.
Here is what I have tried:
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")
The code is working fine but the keyPressed method is not called. How to handle KeyPressedEvent of QDockWidget?
keyPressEvent()
: is a predefined function in PyQt framework used to define the functionalities of the key press event generated. Note that, you can’t change its function name, you can define its argument content and function body as per your requirement.
event.key() == QtCore.Qt.Key_Escape
is being used under the keyPresssEvent() function. Here, key_Escape is used to mention that the key we are going to generate event is the Escape key.
try:
def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Escape:
print("Escape pressed")
I added this line self.dock_widget.setFocusPolicy(QtCore.Qt.StrongFocus) and now its working fine.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With