3

I am lost with my PyQT programm. I want to display SVG image on full screen, but I need to be able to set the scale and position of the image and rest of the screen fill with black colour. I use QSvgWidget and regular QWidget on top of each other, but It is not a good solution, because it runs as two processes and two separate windows. Could you tell me how to make this with only one widget

import sys, os
from PyQt4 import QtGui, QtSvg

class Display(QtSvg.QSvgWidget):
    def __init__(self, parent=None):
        super(Display, self).__init__(parent)

def main():
    app = QtGui.QApplication(sys.argv)
    black = QtGui.QWidget() #setting background with widget
    black.showFullScreen()
    form = Display()
    form.setWindowTitle("Display SVG Layer")

    form.showFullScreen()

    form.setStyleSheet("background-color:black;")
    form.load("E:\example.svg")

    form.move(100,0)
    form.resize(1900,1000)

    app.exec_()

if __name__ == '__main__':
    main()
MMM
  • 31
  • 2

1 Answers1

1

perhaps You can use QGraphicsView and QGraphicsScene:

class MyGraphicsView(QGraphicsView):
    def __init__(self, w, h, parent=None):
        QGraphicsView.__init__(self, parent)

        self.setGeometry(0, 0, w, h)                # screen size

class MyGraphicsScene(QGraphicsScene):
    def __init__(self, w, h, parent = None):
        QGraphicsScene.__init__(self,parent)

        self.setSceneRect(0, 0, w, h)           # screen size

        self.backgroundPen = QPen(QColor(Qt.black))
        self.backgroundBrush = QBrush(QColor(Qt.black))

        self.textPen = QPen(QColor(Qt.lightGray))
        self.textPen.setWidth(1)
        self.textBrush = QBrush(QColor(Qt.lightGray))
        self.textFont = QFont("Helvetica", 14, )

        # paint the background
        self.addRect(0,0,self.width(), self.height(), self.backgroundPen, self.backgroundBrush)

        # paint the svg-title
        self.svgTitle = self.addSimpleText('Display SVG Layer', self.textFont)
        self.svgTitle.setPen(self.textPen)
        self.svgTitle.setBrush(self.textBrush)
        self.svgTitle.setPos(200,75)

        # paint the svg
        self.svgItem = QGraphicsSvgItem('./example.svg')
        '''
        edit:
        if necessary, get the size of the svgItem to calculate 
        scale factor and position
        '''
        self.svgSize = self.svgItem.renderer().defaultSize()
        self.svgItem.setScale(0.25)                     # scale the svg to an appropriate size
        self.addItem(self.svgItem)
        self.svgItem.setPos(200, 125)

if __name__ == '__main__':
    app = QApplication(sys.argv)

    screen_size = app.primaryScreen().size()        
    width = screen_size.width()
    height = screen_size.height()

    graphicsScene = MyGraphicsScene(width, height)

    graphicsView = MyGraphicsView(width, height)
    graphicsView.setScene(graphicsScene)
    graphicsView.show()
    app.exec_() 
a_manthey_67
  • 4,046
  • 1
  • 17
  • 28