Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将视口更改为完全分辨率_Python_Pyqt_Pyqt4 - Fatal编程技术网

Python 将视口更改为完全分辨率

Python 将视口更改为完全分辨率,python,pyqt,pyqt4,Python,Pyqt,Pyqt4,我有一个QGraphicsView,它的宽度和长度与我要保存的pixmap不同。当我保存pixmap时,我希望它是完全分辨率的 def save(self): painter = QtGui.QPainter() painter.setViewport(rect.toRect()) pixmap = QtGui.QPixmap().grabWidget(self) pixmap_scaled = pixmap.scaled(1275, 2004, QtCore.Q

我有一个QGraphicsView,它的宽度和长度与我要保存的pixmap不同。当我保存pixmap时,我希望它是完全分辨率的

def save(self):
    painter = QtGui.QPainter()
    painter.setViewport(rect.toRect())
    pixmap = QtGui.QPixmap().grabWidget(self)
    pixmap_scaled = pixmap.scaled(1275, 2004, QtCore.Qt.KeepAspectRatio)
    pixmap_scaled.save('sample.png')
当我这样做时,pixmap不是完全分辨率的

def save(self):
    painter = QtGui.QPainter()
    painter.setViewport(rect.toRect())
    pixmap = QtGui.QPixmap().grabWidget(self)
    pixmap_scaled = pixmap.scaled(1275, 2004, QtCore.Qt.KeepAspectRatio)
    pixmap_scaled.save('sample.png')
下面的代码是适用于高分辨率图像的fitinview代码,以适合qgraphicsview

    def fitInView(self, scale=True):
        rect = QtCore.QRectF(self._photo.pixmap().rect())
        if not rect.isNull():
            self.setSceneRect(rect)
            if self.hasPhoto():
                unity = self.transform().mapRect(QtCore.QRectF(0, 0, 1, 1))
                self.scale(1 / unity.width(), 1 / unity.height())
                viewrect = self.viewport().rect()
                scenerect = self.transform().mapRect(rect)
                factor = min(viewrect.width() / scenerect.width(),
                         viewrect.height() / scenerect.height())
                self.scale(factor, factor)
            self._zoom = 0
我的QV视图

class FrontGraphics(QtGui.QGraphicsView):
photoClicked = QtCore.pyqtSignal(QtCore.QPoint)

def __init__(self, parent):
    super(FrontGraphics, self).__init__(parent)
    self._zoom = 0
    self._empty = True
    self.setMouseTracking(True)
    self._scene = QtGui.QGraphicsScene(self)
    self._photo = QtGui.QGraphicsPixmapItem()
    self._scene.addItem(self._photo)
    self.setScene(self._scene)
    self.setTransformationAnchor(QtGui.QGraphicsView.AnchorUnderMouse)
    self.setResizeAnchor(QtGui.QGraphicsView.AnchorUnderMouse)
    self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
    self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
    # self.setBackgroundBrush(QtGui.QBrush(QtGui.QColor(30, 30, 30)))
    self.setFrameShape(QtGui.QFrame.NoFrame)
    # self.setFixedSize(350, 600)
    self._idpicture = IDPicture(QtCore.QPointF(50, 50))
    self._scene.addItem(self._idpicture)
    self._studentid = StudentId()
    self._scene.addItem(self._studentid)
    self._fullname = FullName()
    self._scene.addItem(self._fullname)
    self._section = Section()
    self._scene.addItem(self._section)
我的QWidget

class FrontWindow(QtGui.QWidget):
def __init__(self):
    super(FrontWindow, self).__init__()
    self.viewer = FrontGraphics(self)
    self.btnLoad = QtGui.QToolButton(self)
    self.btnLoad.setText('Load image')
    self.btnLoad.clicked.connect(self.loadImage)
    self.btnClear = QtGui.QToolButton(self)
    self.btnClear.setText('Clear')
    self.btnClear.clicked.connect(self.clearImage)
    self.btnPixInfo = QtGui.QLabel(self)
    self.setFixedWidth(500)
    self.setFixedHeight(800)
    self.setGeometry(500, 300, 500, 300)
    # Arrange layout
    VBlayout = QtGui.QVBoxLayout(self)
    VBlayout.addWidget(self.viewer)
    HBlayout = QtGui.QHBoxLayout()
    HBlayout.setAlignment(QtCore.Qt.AlignLeft)
    # HBlayout.addWidget(self.btnLoad)
    HBlayout.addWidget(self.btnClear)
    HBlayout.addWidget(self.btnPixInfo)
    VBlayout.addLayout(HBlayout)

我在这里尝试了答案,但无法做到

全分辨率的含义是什么?self.\u照片分辨率为1275 x 2004,我无法在QGraphicscene上显示,因为它不适合。我使用了FittereSize,因此它可以适应QGraphicsView,而QGraphicsView无法适应原始分辨率(1275 x 2004)。我希望pixmap以1275 x 2004的分辨率保存,而不进行缩放。使用fitInView()方法,您将项目缩放到viewport()的大小,可以理解,此转换已丢失,因此获得相同大小图像的唯一方法是再次缩放,这导致原始图像和生成的图像不相同。我想在保存图像后调用fitInView()方法,这样,图像将在不牺牲分辨率的情况下保存,同时,显示器仍将适合视图。