MouseMoveEvent无法传递到我的子类(Python,Qt)

时间:2018-04-22 12:23:05

标签: callback subclass message qlabel

我在QWidget中放置了从QLabel继承的子类(QDicomLabel_contrast),并且无法回调QDicomLabel_contrast中的鼠标移动事件。代码是:

from PyQt5.QtWidgets import *
import sys

class QDicomLabel_contrast(QLabel):
    def __init__(self,parent=None):
        super(QDicomLabel_contrast,self).__init__(parent)
        self.setStyleSheet("background-color:black")
        self.setMouseTracking(True)

    def mouseMoveEvent(self, QMouseEvent):
        pos = QMouseEvent.pos()
        print(pos.x(), pos.y())


if __name__ == '__main__':

    class MainWindow(QMainWindow):
        def __init__(self, parent=None):
            super(MainWindow, self).__init__(parent)

            self.resize(500,500)
            self.imagelabel = QDicomLabel_contrast()
            self.imagelabel.resize(300,300)
            self.imagelabel.setParent(self)
            #self.imagelabel.show()

            self.imagelabel.setGeometry(10, 20, 300,300)

            widget = QWidget()
            self.setCentralWidget(widget)
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec_()

无法调用QDicomLabel_contrast中的mouseMoveEvent。但是,如果我使用self.imagelabel.show()而不是self.imagelabel.setParent(self),则可以调用mouseMoveEvent,如:     来自PyQt5.QtWidgets导入*     import sys

class QDicomLabel_contrast(QLabel):
    def __init__(self,parent=None):
        super(QDicomLabel_contrast,self).__init__(parent)
        self.setStyleSheet("background-color:black")
        self.setMouseTracking(True)

    def mouseMoveEvent(self, QMouseEvent):
        pos = QMouseEvent.pos()
        print(pos.x(), pos.y())


if __name__ == '__main__':

    class MainWindow(QMainWindow):
        def __init__(self, parent=None):
            super(MainWindow, self).__init__(parent)

            self.resize(500,500)
            self.imagelabel = QDicomLabel_contrast()
            self.imagelabel.resize(300,300)
            #self.imagelabel.setParent(self)
            self.imagelabel.show()

            self.imagelabel.setGeometry(10, 20, 300,300)

            widget = QWidget()
            self.setCentralWidget(widget)
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec_()

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

无法调用鼠标移动功能的原因是鼠标移动事件将传递给QWidget。所以,如果我指示QWidget的父级,问题就可以了:self.imagelabel.setParent(widget)。