QPixmap: Как увеличить размер картинки в addPixmap?

class MyGraphicsView(QGraphicsView):
    def __init__(self):
        super(MyGraphicsView, self).__init__()
        scene = QGraphicsScene(self)
        self.tic_tac_toe = TicTacToe()
        scene.addItem(self.tic_tac_toe)

        self.m = QPixmap("exit.png")

        scene.addPixmap(self.m)

        self.setScene(scene)
        self.setCacheMode(QGraphicsView.CacheBackground)
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)

PNG уже там. Как увеличить его размер при отображении на экране в полосах прокрутки?

Цель состоит в том, чтобы иметь кнопку, на щелчке которой размер этой картинки должен увеличиться.

1 ответ

Решение

Вы должны использовать setScale(), Также, когда вы используете addPixmap() это возвращает созданное QGraphicsPixmapItem,

Кроме того, масштабирование является преобразованием, поэтому оно имеет источник преобразования, по умолчанию оно (0, 0), но в этом случае лучшим вариантом было бы разместить его в центре изображения.

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class MyGraphicsView(QGraphicsView):
    def __init__(self):
        super(MyGraphicsView, self).__init__()
        scene = QGraphicsScene(self)
        self.m = QPixmap("exit.png")
        self.item = scene.addPixmap(self.m)

        self.item.setTransformOriginPoint(self.item.boundingRect().center())

        self.setScene(scene)
        self.setCacheMode(QGraphicsView.CacheBackground)
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)

    @pyqtSlot()
    def scale_pixmap(self):
        self.item.setScale(2*self.item.scale())

class Example(QMainWindow):
    def __init__(self):
        super(Example, self).__init__()
        centralWidget = QWidget()
        self.setCentralWidget(centralWidget)
        lay = QVBoxLayout(centralWidget)
        gv = MyGraphicsView()
        button = QPushButton("scale")
        lay.addWidget(gv)
        lay.addWidget(button)
        button.clicked.connect(gv.scale_pixmap)


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    w = Example()
    w.show()
    sys.exit(app.exec_())
Другие вопросы по тегам