【转】PyQt4 精彩实例分析 实例 26 打印图像

打印图像是图像处理软件中的一个常用功能,本实例实现使用打印机打印图像的功能,如下图所示。

(这张图片的寓意你懂得)

打印图像实际上是在一个QPaintDevice中画图,与平常在QWidget,QPixmap和QImage中画图一样,都是创建一个QPainter对象进行画图,只是打印使用的是QPrinter,QPrinter本质上也是一个绘图设备QPaintDevice。

具体实现代码如下:

  1. # -*- coding: utf-8 -*-   
  2. from PyQt4.QtGui import *  
  3. from PyQt4.QtCore import *  
  4. import sys  
  5.   
  6. QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))  
  7.   
  8. class MainWindow(QMainWindow):  
  9.     def __init__(self,parent=None):  
  10.         super(MainWindow,self).__init__(parent)  
  11.         self.setWindowTitle(self.tr("打印图片"))  
  12.         self.imageLabel=QLabel()  
  13.         self.imageLabel.setSizePolicy(QSizePolicy.Ignored,QSizePolicy.Ignored)  
  14.         self.setCentralWidget(self.imageLabel)  
  15.   
  16.         self.image=QImage()  
  17.           
  18.         self.createActions()  
  19.         self.createMenus()  
  20.         self.createToolBars()  
  21.   
  22.         if self.image.load("postgresql.jpg"):  
  23.             self.imageLabel.setPixmap(QPixmap.fromImage(self.image))  
  24.             self.resize(self.image.width(),self.image.height())  
  25.                                         
  26.     def createActions(self):  
  27.         self.PrintAction=QAction(QIcon("images/print.png"),self.tr("打印"),self)  
  28.         self.PrintAction.setShortcut("Ctrl+P")  
  29.         self.PrintAction.setStatusTip(self.tr("打印"))  
  30.         self.connect(self.PrintAction,SIGNAL("triggered()"),self.slotPrint)  
  31.   
  32.     def createMenus(self):  
  33.         PrintMenu=self.menuBar().addMenu(self.tr("打印"))  
  34.         PrintMenu.addAction(self.PrintAction)  
  35.   
  36.     def createToolBars(self):  
  37.         fileToolBar=self.addToolBar("Print")  
  38.         fileToolBar.addAction(self.PrintAction)  
  39.   
  40.     def slotPrint(self):  
  41.         printer=QPrinter()  
  42.         printDialog=QPrintDialog(printer,self)  
  43.         if printDialog.exec_():  
  44.             painter=QPainter(printer)  
  45.             rect=painter.viewport()  
  46.             size=self.image.size()  
  47.             size.scale(rect.size(),Qt.KeepAspectRatio)  
  48.             painter.setViewport(rect.x(),rect.y(),size.width(),size.height())  
  49.             painter.setWindow(self.image.rect())  
  50.             painter.drawImage(0,0,self.image)  
  51.               
  52. app=QApplication(sys.argv)  
  53. main=MainWindow()  
  54. main.show()  
  55. 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行打印。

posted @ 2014-11-19 11:15  jakey.chen  阅读(1576)  评论(0)    收藏  举报