带有 QLabel 的 mouseDoubleClickEvent

mouseDoubleClickEvent with QLabel

如何实现 mouseDoubleClickEvent()?

这是代码行:

self.ui.label_3.mouseDoubleClickEvent(自己)

我总是得到错误;

TypeError: 'PySide2.QtWidgets.QWidget.mouseDoubleClickEvent' called with wrong argument types:
  PySide2.QtWidgets.QWidget.mouseDoubleClickEvent(MainWindow)
Supported signatures:
  PySide2.QtWidgets.QWidget.mouseDoubleClickEvent(PySide2.QtGui.QMouseEvent)

您没有覆盖 mouseDoubleClickEvent 方法,而是错误地调用了它。

一般重写 mouseDoubleClickEvent 方法应该按以下方式完成:

import sys

from PySide2.QtCore import Qt
from PySide2.QtWidgets import QApplication, QLabel


class Label(QLabel):
    def mouseDoubleClickEvent(self, event):
        super().mouseDoubleClickEvent(event)
        print("mouseDoubleClickEvent")


def main():
    app = QApplication(sys.argv)
    label = Label(text="Qt is awesome!!!", alignment=Qt.AlignCenter)
    label.resize(640, 480)
    label.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

但在您的情况下,这似乎是不可能的,因为您需要从 QLabel 继承并替换它。在这种情况下,最好使用 eventFilter:

    self.ui.label_3.installEventFilter(self)

def eventFilter(self, obj, event):
    if obj is self.ui.label_3 and event.type() == QEvent.MouseButtonDblClick:
        print("MouseButtonDblClick")
    return super().eventFilter(obj, event)