【原创】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_()

posted on 2012-01-27 21:30  源姜  阅读(876)  评论(1编辑  收藏  举报

导航