我在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_()
答案 0 :(得分:0)
我找到了解决方案。
无法调用鼠标移动功能的原因是鼠标移动事件将传递给QWidget。所以,如果我指示QWidget的父级,问题就可以了:self.imagelabel.setParent(widget)。