首先声明,如果转载请声明作者以及来源
第三十五例:SVG格式图片的显示
__author__ = '375159507@qq.com'
try:
from PySide import QtGui
from PySide import QtCore
from PySide import QtSvg
from PySide import QtXml
except ImportError:
from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4 import QtSvg
from PyQt4 import QtXml
class 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:
return
class 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>
程序运行效果图