• 【原创】Python结合PySide使用QT编写ImageViewer[从C++迁移简化]


    近期正在学习QT。用Python很久了,QT入门中。PySide做的太棒了。代码不需要修改直接可以运行在Nokia N9上。
    本代码的C++版本在http://developer.qt.nokia.com/doc/qt-4.8/widgets-imageviewer.html
    目的是学习不是为了实现一个软件,所以做了不少的简化。
    QPixmap和QImage都能显示图片,可还是用QImage读取,放QPixmap显示,我查了资料 http://www.developer.nokia.com/C ... 8%E8%A7%A3%E6%9E%90
    总结下来QPixmap依赖于硬件,性能更好消耗资源,QImage不依赖于硬件用来预先处理图片后方QPixmap显示更加速度。
    以下为源码。
    ps:自己写的其他QT程序放进N9,桌面图标啥的没问题,但是不能滑动退出,也不能竖屏,只能横屏,请大侠指点一下。
    运行效果
    ImageViewer
    #coding=utf8
    import sys

    __author__ = 'jy@cjlu.edu.cn'
    from PySide.QtCore import *
    from PySide.QtGui import *
    class ImageViewer(QMainWindow):
        def __init__(self,parent=None):
            """

            """
            super(ImageViewer,self).__init__(parent)
            self.imageLabel=QLabel()
            self.imageLabel.setBackgroundRole(QPalette.Base)
            self.imageLabel.setSizePolicy(QSizePolicy.Ignored,QSizePolicy.Ignored)
    #        是否变换比率
            self.imageLabel.setScaledContents(True)
            self.imageLabel.resize(500,400)
            self.scrollArea=QScrollArea()
            self.scrollArea.setBackgroundRole(QPalette.Dark)
            self.scrollArea.setWidget(self.imageLabel)
            self.setCentralWidget(self.scrollArea)
            self.createActions()
            self.createMenus()

            self.setWindowTitle("Image Viewer")
            self.resize(500,400)
        def __open(self):
            filename=QFileDialog.getOpenFileName(None,"OpenFile",QDir.currentPath())[0]
            if filename:
                self.image=QImage(filename)
                if not self.image:
                    QMessageBox.information(None,"Error","Cannot load ")
                else:
                    self.imageLabel.setPixmap(QPixmap.fromImage(self.image))
                    self.imageLabel.adjustSize()
                    self.scrollArea.setWidgetResizable(True)
        def createActions(self):
            self.openAct=QAction("&Open...",None)
            self.openAct.setShortcut("Ctrl+O")
            self.openAct.triggered.connect(self.__open)

            self.closeAct=QAction("&Close...",None)
            self.closeAct.setShortcut("Ctrl+Q")
            self.closeAct.triggered.connect(self.close)

            pass
        def createMenus(self):
            self.fileMenu=QMenu("&File",self)
            self.fileMenu.addAction(self.openAct)
            self.fileMenu.addAction(self.closeAct)
            self.mb=self.menuBar()
            self.mb.addMenu(self.fileMenu)
            pass

    if __name__=="__main__":
        app=QApplication(sys.argv)
        fm=ImageViewer()
        fm.show()
    #全屏使用下句
    #    fm.showFullScreen()
        app.exec_()

    有时候专注也能让人幸福,游戏读书莫不如此,专注之人必有动人之处。
  • 相关阅读:
    Spring Boot
    Linux入门
    synchronized(一)
    避免XSS攻击
    MySql概述及入门(五)
    MySQL概述及入门(四)
    上传漏洞总结-upload-labs
    文件类型解析漏洞防御与攻击(PHP)
    Dvna for Owasp top 10 2017
    XSS 漏洞介绍
  • 原文地址:https://www.cnblogs.com/pcode/p/2330218.html
Copyright © 2020-2023  润新知