【原创】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,桌面图标啥的没问题,但是不能滑动退出,也不能竖屏,只能横屏,请大侠指点一下。
运行效果
#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_()