【PyQt4实例8】SVG格式图片的显示【转】

 转载上一实例相同的地址,但是发现有些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_())






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值