使用PyQT中的QSvgWidget全屏设置SVG图像的尺寸?

时间:2016-05-01 18:43:34

标签: svg pyqt qtsvg

我迷失了PyQT程序。我想在全屏显示SVG图像,但我需要能够设置图像的比例和位置,并且屏幕的其余部分用黑色填充。 我使用QSvgWidget和常规QWidget,但它不是一个好的解决方案,因为它运行为两个进程和两个单独的窗口。 你能告诉我如何用一个小部件来做这个吗

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()

1 个答案:

答案 0 :(得分:0)

也许您可以使用QGraphicsViewQGraphicsScene

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_()