改写linux窗口程序设计的Qt例子(4)

来源:互联网 发布:李小龙英雄再现 源码 编辑:程序博客网 时间:2024/05/02 01:58

首先声明,如果转载请声明作者以及来源

第三十五例:SVG格式图片的显示

__author__ = '375159507@qq.com'try:    from PySide import QtGui    from PySide import QtCore    from PySide import QtSvg    from PySide import QtXmlexcept ImportError:    from PyQt4 import QtGui    from PyQt4 import  QtCore    from PyQt4 import QtSvg    from PyQt4 import QtXmlclass SvgWidget(QtSvg.QSvgWidget):    def __init__(self):        super(SvgWidget,self).__init__()        self.render = self.renderer()        self.mousePresPos = QtCore.QPoint(0,0)        self.newPos = QtCore.QPoint(20,20)    def wheelEvent(self, e):        self.diff = 0.1        self.size = QtCore.QSize()        self.size = self.render.defaultSize()        self.mywidth = self.size.width()        self.myheight = self.size.height()        if e.delta() > 0:            self.mywidth = self.width() + self.width()*self.diff            self.myheight = self.height() + self.height()*self.diff        else:            self.mywidth = self.width() - self.width()*self.diff            self.myheight = self.height() - self.height()*self.diff        self.resize(self.mywidth,self.myheight)class SvgWindonw(QtGui.QScrollArea):    def __init__(self):        super(SvgWindonw,self).__init__()        self.svgwidget = SvgWidget()        self.setWidget(self.svgwidget)        self.OK = False    def setFile(self,filename):        self.svgwidget.load(filename[0])        self.myrender = self.svgwidget.renderer()        self.svgwidget.resize(self.myrender.defaultSize())        self.OK = True    def mousePressEvent(self, e):        if self.OK:            self.mousePresPos = e.pos()            self.svgwidget.newPos.setX(self.horizontalScrollBar().value())            self.svgwidget.newPos.setY(self.verticalScrollBar().value())            e.accept()        else:            return    def mouseMoveEvent(self, e):        if self.OK:            self.horizontalScrollBar().setValue(self.svgwidget.newPos.x()-(self.mousePresPos.x() - e.pos().x()))            self.verticalScrollBar().setValue(self.svgwidget.newPos.y() - (self.mousePresPos.y() - e.pos().y()))            self.horizontalScrollBar().update()            self.verticalScrollBar().update()            e.accept()        else:            returnclass MainWindow(QtGui.QMainWindow):    def __init__(self):        super(MainWindow,self).__init__()        self.setWindowTitle("图片浏览器")        self.svgwindow = SvgWindonw()        self.createbutton()        self.setCentralWidget(self.svgwindow)    def slotopenfile(self):        filename = QtGui.QFileDialog.getOpenFileName(self,"打开文件","/","svg files(*.svg)")        if filename :            self.svgwindow.setFile(filename)        else:            return    def createbutton(self):        mymenu = QtGui.QMenu("文件")        myaction = QtGui.QAction("打开",self)        myaction.triggered.connect(self.slotopenfile)        mymenu.addAction(myaction)        mainmenu = self.menuBar()        mainmenu.addMenu(mymenu)        self.setMenuBar(mainmenu)if __name__ == '__main__':    import sys    app = QtGui.QApplication(sys.argv)    mainwindow = MainWindow()    mainwindow.show()    sys.exit(app.exec_())
SVG图片,请大家保存文件,后缀名为.svg

<?xml version="1.0"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"     "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg xmlns="http://www.w3.org/2000/svg" version="1.1"     width="467" height="462">  <!-- This is the red square: -->  <rect x="80" y="60" width="250" height="250" rx="20" fill="red"         stroke="black" stroke-width="2px" />  <!-- This is the blue square: -->  <rect x="140" y="120" width="250" height="250" rx="40" fill="blue"         stroke="black" stroke-width="2px" fill-opacity="0.7" /></svg>
程序运行效果图




原创粉丝点击