在 PyQt5 小部件中检测单击鼠标 - 缺少 mouseClickEvent 函数

Posted

技术标签:

【中文标题】在 PyQt5 小部件中检测单击鼠标 - 缺少 mouseClickEvent 函数【英文标题】:Detect single mouse click in PyQt5 Widgets - missing mouseClickEvent function 【发布时间】:2021-08-10 18:33:41 【问题描述】:

我想在 PyQt5 中识别在 QWidget 上单击鼠标。在docs 中有mouseDoubleClickEventmousePressEvent,但没有mouseClickEvent 的单击功能。我如何获得该功能?谢谢

顺便说一句,我注意到 PyQtGraph 确实有一个 mouseClickEvent 函数。

【问题讨论】:

“点击”是指按下然后释放吗? 我的意思是在同一个地方发布的新闻。 还有mouseReleaseEvent。如果您的目标是检测单击鼠标,这可能是一个选项 【参考方案1】:

Qt 本身不提供“点击”事件,您必须基于mousePressEventmouseReleaseEvent 来实现这样的功能,方法是检查释放是否发生在小部件的几何形状内(并且,可能是按下并释放了正确的鼠标按钮)。

class ClickWidget(QWidget):
    pressPos = None
    clicked = pyqtSignal()

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.pressPos = event.pos()

    def mouseReleaseEvent(self, event):
        # ensure that the left button was pressed *and* released within the
        # geometry of the widget; if so, emit the signal;
        if (self.pressPos is not None and 
            event.button() == Qt.LeftButton and 
            event.pos() in self.rect()):
                self.clicked.emit()
        self.pressPos = None

【讨论】:

以上是关于在 PyQt5 小部件中检测单击鼠标 - 缺少 mouseClickEvent 函数的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5 Tab Widget:如何在鼠标单击时获取活动选项卡窗口的索引?

尽管更新了小部件,但 Pyqt5 更新的小部件未添加到布局中

在pyqt5中的QWidget上实现dragMoveEvent?

pyqt5 永久小部件焦点

模拟鼠标拖动事件 PyQt5

如何避免鼠标单击一个小部件触发 Qt 中其他小部件的信号?