【转】PyQt4 精彩实例分析 实例 26 打印图像
打印图像是图像处理软件中的一个常用功能,本实例实现使用打印机打印图像的功能,如下图所示。

(这张图片的寓意你懂得)
打印图像实际上是在一个QPaintDevice中画图,与平常在QWidget,QPixmap和QImage中画图一样,都是创建一个QPainter对象进行画图,只是打印使用的是QPrinter,QPrinter本质上也是一个绘图设备QPaintDevice。
具体实现代码如下:
- # -*- coding: utf-8 -*-
- from PyQt4.QtGui import *
- from PyQt4.QtCore import *
- import sys
- QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))
- class MainWindow(QMainWindow):
- def __init__(self,parent=None):
- super(MainWindow,self).__init__(parent)
- self.setWindowTitle(self.tr("打印图片"))
- self.imageLabel=QLabel()
- self.imageLabel.setSizePolicy(QSizePolicy.Ignored,QSizePolicy.Ignored)
- self.setCentralWidget(self.imageLabel)
- self.image=QImage()
- self.createActions()
- self.createMenus()
- self.createToolBars()
- if self.image.load("postgresql.jpg"):
- self.imageLabel.setPixmap(QPixmap.fromImage(self.image))
- self.resize(self.image.width(),self.image.height())
- def createActions(self):
- self.PrintAction=QAction(QIcon("images/print.png"),self.tr("打印"),self)
- self.PrintAction.setShortcut("Ctrl+P")
- self.PrintAction.setStatusTip(self.tr("打印"))
- self.connect(self.PrintAction,SIGNAL("triggered()"),self.slotPrint)
- def createMenus(self):
- PrintMenu=self.menuBar().addMenu(self.tr("打印"))
- PrintMenu.addAction(self.PrintAction)
- def createToolBars(self):
- fileToolBar=self.addToolBar("Print")
- fileToolBar.addAction(self.PrintAction)
- def slotPrint(self):
- printer=QPrinter()
- printDialog=QPrintDialog(printer,self)
- if printDialog.exec_():
- painter=QPainter(printer)
- rect=painter.viewport()
- size=self.image.size()
- size.scale(rect.size(),Qt.KeepAspectRatio)
- painter.setViewport(rect.x(),rect.y(),size.width(),size.height())
- painter.setWindow(self.image.rect())
- painter.drawImage(0,0,self.image)
- app=QApplication(sys.argv)
- main=MainWindow()
- main.show()
- app.exec_()
第11行设置窗体的标题。
第12-14行创建一个放置图像的QLabel对象imageLabel,并将该QLabel对象设置为中心窗体。
第18-20行创建菜单,工具条等部件。
第22-24行在imageLabel对象中放置图像。
第41行新建一个QPrinter对象。
第42行创建一个QPrintDialog对象,参数为QPrinter对象。
第43行判断打印对话框显示后用户是否单击“打印”按钮,若单击“打印”按钮,则相关打印属性可以通过创建QPrintDialog对象时使用的QPrinter对象获得,若用户单击“取消”按钮,则不执行后续的打印操作。
第44行创建一个QPainter对象,并指定绘图设备为一个QPrinter对象。
第45行获得QPainter对象的视口矩形。
第46行获得图像的大小。
第47,48行按照图形的比例大小重新设置视口矩形。
第49行设置QPainter窗口大小为图像的大小。
第50行打印。

浙公网安备 33010602011771号