python - 如何为 QTextEdit 小部件定义 mousePressEvent 函数而不对其进行子类化?
问题描述
class widget(QWidget):
...
self.edit=QTextEdit()
def mousePressEvent(self, event):
if event.button()==Qt.LeftButton:
print('test')
self.edit.mousePressEvent(event)
我已经尝试过了,但它不起作用。它适用于父小部件。无论如何我可以在不继承 QTextEdit 的情况下做到这一点吗?
解决方案
在这种情况下,您必须使用eventFilter
除了继承自的类之外的类,QAbstractScrollArea
因为QTextEdit
您必须使用viewport()
:
from PyQt5 import QtCore, QtWidgets
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
self.edit = QtWidgets.QTextEdit()
btn = QtWidgets.QPushButton()
le = QtWidgets.QLineEdit()
lay = QtWidgets.QVBoxLayout(self)
for w in (self.edit, btn, le):
lay.addWidget(w)
self.edit.viewport().installEventFilter(self)
def eventFilter(self, obj, event):
if obj is self.edit.viewport() and event.type() == QtCore.QEvent.MouseButtonPress:
if event.button() == QtCore.Qt.LeftButton:
print('test')
return super(Widget, self).eventFilter(obj, event)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
推荐阅读
- pdf - PDF 文件中的参数“Nameddest”
- html - 如何使用引导程序在每个网格部分之间添加间隙
- vue.js - 如何在我的 Vue 项目中实现 Electron 的 webview?
- angular - 将数据从子组件传递到应用组件,无需循环依赖
- amazon-web-services - API 网关和负载均衡器概念
- python - 如何将数据框的所有列合并为一列?
- python - 查找列表中的第一个符号变化
- python - os.setreuid 的调用对于除 root 之外的任何用户都挂起
- ruby-on-rails - 使用 Rails gem 公寓和多租户迁移数据库返回 PG::InvalidSchemaName
- html - 如何更改 MDB 导航栏中的文本颜色?