【发布时间】:2023-03-21 06:53:01
【问题描述】:
我最近在我的 PyQt5 应用程序中引入了一个错误。我有一个 QWidget,我在其中渲染游戏,并将其用作 QMainWindow 中的 centralWidget,我称之为 Canvas。我想在 Canvas 上渲染一些文本,所以我制作了以下 QWidget,现在我将其用作我的 centralWidget。它在 Canvas 上堆叠一个 QLabel。
class CentralWidget(PyQt5.QtWidgets.QWidget):
def __init__(self, content: Canvas) -> None:
super().__init__()
self.content = content
content.setParent(self)
self.label = PyQt5.QtWidgets.QLabel('', self)
self.label.setObjectName('notification_label')
self.label.setStyleSheet("QLabel { color : white; font-size: 50px }")
self.label.setAlignment(PyQt5.QtCore.Qt.AlignCenter)
def resizeEvent(self, event: PyQt5.QtGui.QResizeEvent) -> None: # pylint: disable=invalid-name
self.label.setGeometry(0, 0, event.size().width(), event.size().height())
self.content.setGeometry(0, 0, event.size().width(), event.size().height())
这渲染得很好,但它导致我的画布停止接收鼠标输入。我意识到我的 QLabel 正在拦截所有输入,我通过添加 self.label.setAttribute(PyQt5.QtCore.Qt.WA_TransparentForMouseEvents) 解决了这个问题。我想我应该添加一个回归测试。
我尝试使用 QTest 和 QApplication 将鼠标事件发送到 QMainWindow,期望它们会冒泡,但事件似乎从未超过 QMainWindow。然后我尝试将事件发送到我的画布,我看到当我这样做时它们会冒泡到 QMainWindow。我不是想测试 Canvas 是否正确处理输入,我想测试输入事件是否被路由到 Canvas。有没有办法在单元测试中验证这一点?
【问题讨论】:
-
在为通用事件创建单元测试之前,我会检查小部件结构。你能提供一个实际的minimal, reproducible example吗?
标签: unit-testing pyqt5