转载上一实例相同的地址,但是发现有些BUG,修改了,代码如下:
#-*- coding:utf-8 -*-
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtSvg
from PyQt4 import QtXml
QTextCodec.setCodecForTr(QTextCodec.codecForName("utf-8"))
class SvgWidget(QtSvg.QSvgWidget):
def __init__(self):
super(SvgWidget,self).__init__()
self.render = self.renderer()
self.mousePresPos = QPoint(0,0)
self.newPos = QPoint(20,20)
def wheelEvent(self, e):
self.diff = 0.1
self.size = 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(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)
myrender = self.svgwidget.renderer()
self.svgwidget.resize(myrender.defaultSize())
self.OK = True
return myrender.defaultSize()
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(QMainWindow):
def __init__(self):
super(MainWindow,self).__init__()
self.setWindowTitle(self.tr("图片浏览器"))
self.svgwindow = SvgWindonw()
self.createbutton()
self.setCentralWidget(self.svgwindow)
def slotopenfile(self):
filename = QFileDialog.getOpenFileName(self,"打开文件","/","svg files(*.svg)")
if filename :
size = self.svgwindow.setFile(filename)
self.resize(size)
else:
return
def createbutton(self):
mainmenu = self.menuBar().addMenu(self.tr("文件"))
myaction = QAction(self.tr("打开"),self)
self.connect(myaction,SIGNAL("triggered()"),self.slotopenfile)
mainmenu.addAction(myaction)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
mainwindow = MainWindow()
mainwindow.show()
sys.exit(app.exec_())