python - 如何在pyqt(QGIS)中捕获QDockWidget的KeyPressedEvent
问题描述
我正在尝试在 QDockWidget 的 KeyPressedEvent 添加一些逻辑。它可以在没有 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 方法。QDockWidget的KeyPressedEvent如何处理?
解决方案
我添加了这一行 self.dock_widget.setFocusPolicy(QtCore.Qt.StrongFocus) 现在它工作正常。
推荐阅读
- r - R t 检验 2 组,3 次重复,每组有多个值进行比较
- git - 如何在 Mac 上用 CRLF 和 LF git 提交一些文件?
- android - setTextColor 不适用于 LiveData 和 DataBinding
- html - 在反应 html5 应用程序中,如何并排放置 3 个选择列表?
- sql - WordPress 迁移 - 找到旧的根路径?
- xamarin.forms - 选择器的选定项目更改时如何触发命令
- c# - 强制 b-PAC 生成特定符号大小的 DataMatrix 条形码
- javascript - 将所有控制台输出 [日志、错误、警告等] 代理到 HTML
- php - PHP foreach 变量外部循环未更新
- java - 按长度和字母顺序在行中打印单词