2

我迷失了我的 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()
4

1 回答 1

0

也许您可以使用QGraphicsViewand 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_() 
于 2016-05-03T10:24:45.183 回答