Python Qt GUI设计:QPrinter打印图片类(基础篇—21)
打印图像是图像处理软件中的一个常用功能,打印图像实际上是在QPaintDevice中画图,与平常在QWidget、QPixmap和Qlmage中画图一样,都是创建一个QPainter对象进行画图的,只是打印使用的是QPrinter,它本质上也是一个QPaintDevice(绘图设备)。
通过一个示例了解QPrinter打印图片类的使用,效果如下所示:
实现代码如下所示:
from PyQt5.QtCore import Qtfrom PyQt5.QtGui import QImage , QIcon, QPixmapfrom PyQt5.QtWidgets import QApplication , QMainWindow, QLabel, QSizePolicy , QActionfrom PyQt5.QtPrintSupport import QPrinter, QPrintDialogimport sysclass MainWindow(QMainWindow):def __init__(self,parent=None):super(MainWindow,self).__init__(parent)self.setWindowTitle(self.tr("打印图片"))# 创建一个放置图像的QLabel对象imageLabel,并将该QLabel对象设置为中心窗体。self.imageLabel=QLabel()self.imageLabel.setSizePolicy(QSizePolicy.Ignored,QSizePolicy.Ignored)self.setCentralWidget(self.imageLabel)self.image=QImage()# 创建菜单,工具条等部件self.createActions()self.createMenus()self.createToolBars()# 在imageLabel对象中放置图像if self.image.load("./2.jpg"):self.imageLabel.setPixmap(QPixmap.fromImage(self.image))self.resize(self.image.width(),self.image.height())def createActions(self):self.PrintAction=QAction(QIcon("./2.jpg"),self.tr("打印"),self)self.PrintAction.setShortcut("Ctrl+P")self.PrintAction.setStatusTip(self.tr("打印"))self.PrintAction.triggered.connect(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):# 新建一个QPrinter对象printer=QPrinter()# 创建一个QPrintDialog对象,参数为QPrinter对象printDialog=QPrintDialog(printer,self)'''判断打印对话框显示后用户是否单击“打印”按钮,若单击“打印”按钮,则相关打印属性可以通过创建QPrintDialog对象时使用的QPrinter对象获得,若用户单击“取消”按钮,则不执行后续的打印操作。'''if printDialog.exec_():# 创建一个QPainter对象,并指定绘图设备为一个QPrinter对象。painter=QPainter(printer)# 获得QPainter对象的视口矩形rect=painter.viewport()# 获得图像的大小size=self.image.size()# 按照图形的比例大小重新设置视口矩形size.scale(rect.size(),Qt.KeepAspectRatio)painter.setViewport(rect.x(),rect.y(),size.width(),size.height())# 设置QPainter窗口大小为图像的大小painter.setWindow(self.image.rect())# 打印painter.drawImage(0,0,self.image)if __name__ == "__main__":app=QApplication(sys.argv)main=MainWindow()main.show()sys.exit(app.exec_())
往期推荐
评论

