QGraphicScene Background - PullRequest
       28

QGraphicScene Background

1 голос
/ 27 апреля 2020

Я изучаю PyQt5 для разработки небольшого академического проекта. Мне нужно установить фон для QGraphicScene, но я не могу заставить изображение вписаться в сцену. Это иногда повторяется или слишком велико в зависимости от масштаба, который я применяю. Вот мой код:

class MainWindow(QWidget):

    def __init__(self):
        super().__init__()

        self.title = "title";
        self.top = 100
        self.left = 100
        self.width = 1500
        self.height = 900
        self.initUI()

    def initUI(self):

        scene = QGraphicsScene(0, 0, width, heigth)
        view  = QGraphicsView(scene, self)
        image = QImage('pathToImage')
        scene.setBackgroundBrush(QBrush(image))

        self.setWindowTitle(self.title)
        self.setGeometry(self.top, self.left, self.width, self.height)
        self.show()

Я пытался изменить масштаб изображения с помощью

image.scaled(scene.width(), scene.height(), Qt.KeepAspectRatio)

, но он не подходит, на самом деле есть полосы прокрутки, потому что изображение слишком большое , Кто-нибудь знает, где проблема?

1 Ответ

1 голос
/ 27 апреля 2020

Если вы хотите, чтобы изображение масштабировалось, вы должны переопределить метод drawBackground():

class GraphicsScene(QGraphicsScene):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._image = QImage()

    @property
    def image(self):
        return self._image

    @image.setter
    def image(self, img):
        if img != self.image:
            self._image = img
            self.update()

    def drawBackground(self, painter, rect):
        if self.image.isNull():
            super().drawBackground(painter, rect)
        else:
            painter.drawImage(rect, self.image)
scene = GraphicsScene(self)
scene.image = QImage("pathToImage")
view = QGraphicsView(scene)
...