Pyqt QGraphicView鼠标坐标系

2024-09-28 16:20:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Qgraphicview裁剪图像 但我面临着一个抵消的问题 这是Q主窗口

class ImageViewer(QtWidgets.QMainWindow):
    def __init__(self):
        super(ImageViewer, self).__init__()

        self.scene = QtWidgets.QGraphicsScene()
        self.imageLabel = QtWidgets.QLabel()
        self.cropLabel = QtWidgets.QLabel()
        self.scrollArea = QtWidgets.QScrollArea()
        self.scrollArea.setWidget(self.imageLabel)
        self.setCentralWidget(widget)

        self.scene.addWidget(splitter)
        self.view = QtWidgets.QGraphicsView(self.scene)
        self.view.setMouseTracking(True)
        self.view.setDragMode(QtWidgets.QGraphicsView.RubberBandDrag)

。。。在

^{pr2}$

代码运行良好,但我有一个偏移量(似乎是边距或菜单栏值或混合值)。所以我想我不是在一个好的系统,但不知道如何访问它


Tags: 图像selfviewinitdefsceneclassqgraphicsview
1条回答
网友
1楼 · 发布于 2024-09-28 16:20:10

最后,我离开了QGraphicView,在处理QLabel的专用小部件类中重新实现了鼠标事件。 我工作得很好

class View(QtWidgets.QLabel):
def __init__(self):
    super(View,self).__init__()

    self.cropLabel = QtWidgets.QLabel(self)
    self.label = QtWidgets.QLabel(self)

    self.ogpixmap = QtGui.QPixmap()
    fileName = r'C:/Users/user11.HPO-SAMAT/Pictures/Lake.jpg'
    image = QtGui.QImage(fileName)
    self.pixmap = QtGui.QPixmap.fromImage(image)
    self.label.setPixmap(self.pixmap)
    self.label.adjustSize()

def mousePressEvent(self, event):
    self.originQPoint = event.pos()
    self.currentQRubberBand = QtWidgets.QRubberBand(QtWidgets.QRubberBand.Rectangle, self)
    self.currentQRubberBand.setGeometry(QtCore.QRect(self.originQPoint, QtCore.QSize()))
    self.currentQRubberBand.show()

def mouseMoveEvent(self, event):
    self.currentQRubberBand.setGeometry(QtCore.QRect(self.originQPoint, event.pos()).normalized())

def mouseReleaseEvent (self, event):
    self.currentQRubberBand.hide()
    currentQRect = self.currentQRubberBand.geometry()
    self.currentQRubberBand.deleteLater()
    cropPixmap = self.pixmap.copy(currentQRect)
    self.cropLabel.setPixmap(cropPixmap)

class Viewer(QtWidgets.QMainWindow):
def __init__(self):
    super().__init__()

    self.view = View()
    self.setCentralWidget(self.view)

相关问题 更多 >