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

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

第三十五例: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>
程序运行效果图




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值