2017-07-24 102 views
0

我試圖用Qgraphicview 裁剪圖像,但我現在面臨一個問題,偏移 這裏的QMainWindow中PyQt的QGraphicView鼠標座標系統

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) 

...

def mousePressEvent(self, eventQMouseEvent): 
    print("pressed") 
    self.originQPoint = self.view.mapToScene(eventQMouseEvent.pos()) 
    self.currentQRubberBand = QtWidgets.QRubberBand(QtWidgets.QRubberBand.Rectangle, self) 
    self.currentQRubberBand.setGeometry(QtCore.QRect(self.originQPoint, QtCore.QSize())) 
    self.currentQRubberBand.show() 

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

def mouseReleaseEvent (self, eventQMouseEvent): 
    #self.currentQRubberBand.hide() 
    currentQRect = self.currentQRubberBand.geometry() 
    print(currentQRect) 
    self.currentQRubberBand.deleteLater() 
    cropPixmap = self.pixmap.copy(currentQRect) 
    self.cropLabel.setPixmap(cropPixmap) 
    cropPixmap.save('output.png') 

代碼工作好,但我有一個抵消(似乎是保證金或菜單價值或混合)。所以我想我不是在好系統中,但不知道如何訪問它

回答

0

最後,我離開了QGraphicView,並在處理QLabel的專用Widget類中重新實現了鼠標事件。 我的工作很好

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)