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_()

    有时候专注也能让人幸福,游戏读书莫不如此,专注之人必有动人之处。
  • 相关阅读:
    使用 apache ant 轻松实现文件压缩/解压缩(转)
    Ajax下载文件(页面无刷新)
    java实现写大量数据到文件中
    mysql的wait_timeout配置(此处处理方法是有问题的,不建议作为操作参考)
    Class对象
    使用Comparable接口的小例子
    java打印菱形的简单方法
    自适应学习率调整:AdaDelta
    神经网络模型算法与生物神经网络的最新联系
    [杂谈]机器学习:数学、概率与人工智能
  • 原文地址:https://www.cnblogs.com/pcode/p/2330218.html
Copyright © 2011-2022 走看看