zoukankan      html  css  js  c++  java
  • 【原创】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_()

    有时候专注也能让人幸福,游戏读书莫不如此,专注之人必有动人之处。
  • 相关阅读:
    前后端不分离的springboot项目问题:页面框架问题
    SpringBoot使用Filter过滤器处理是否登录的过滤时,用response.sendRedirect()转发报错
    mysql千万级数据优化查询
    java进阶学习的一些思路
    java的List列表转成Tree(树形)结构列表
    cmd 一键获取 所有连接过的wifi 密码
    SQLMap用户手册【超详细】
    Python:SQLMAP参数中文解释
    初识sql注入及sqlmap
    wwwscan网站目录文件批量扫描工具
  • 原文地址:https://www.cnblogs.com/pcode/p/2330218.html
Copyright © 2011-2022 走看看