打印圖像是圖像處理軟件中的一個(gè)常用功能,打印圖像實(shí)際上是在QPaintDevice中畫圖疫衩,與平常在QWidget邑商、QPixmap和Qlmage中畫圖一樣,都是創(chuàng)建一個(gè)QPainter對(duì)象進(jìn)行畫圖的殃姓,只是打印使用的是QPrinter,它本質(zhì)上也是一個(gè)QPaintDevice(繪圖設(shè)備)瓦阐。
通過一個(gè)示例了解QPrinter打印圖片類的使用蜗侈,實(shí)現(xiàn)代碼如下所示:
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QImage , QIcon, QPixmap
from PyQt5.QtWidgets import QApplication? , QMainWindow, QLabel,? QSizePolicy , QAction
from PyQt5.QtPrintSupport import QPrinter, QPrintDialog
import sys?
class MainWindow(QMainWindow):?
def __init__(self,parent=None):?
super(MainWindow,self).__init__(parent)?
self.setWindowTitle(self.tr("打印圖片"))?
? ? ? # 創(chuàng)建一個(gè)放置圖像的QLabel對(duì)象imageLabel,并將該QLabel對(duì)象設(shè)置為中心窗體睡蟋。
self.imageLabel=QLabel()?
self.imageLabel.setSizePolicy(QSizePolicy.Ignored,QSizePolicy.Ignored)?
self.setCentralWidget(self.imageLabel)?
self.image=QImage()?
? ? ? # 創(chuàng)建菜單踏幻,工具條等部件
self.createActions()?
self.createMenus()?
self.createToolBars()?
? ? ? # 在imageLabel對(duì)象中放置圖像
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):?
? ? ? # 新建一個(gè)QPrinter對(duì)象
printer=QPrinter()?
? ? ? # 創(chuàng)建一個(gè)QPrintDialog對(duì)象,參數(shù)為QPrinter對(duì)象
printDialog=QPrintDialog(printer,self)?
'''
? ? ? 判斷打印對(duì)話框顯示后用戶是否單擊“打印”按鈕戳杀,若單擊“打印”按鈕该面,
? ? ? 則相關(guān)打印屬性可以通過創(chuàng)建QPrintDialog對(duì)象時(shí)使用的QPrinter對(duì)象獲得,
? ? ? 若用戶單擊“取消”按鈕信卡,則不執(zhí)行后續(xù)的打印操作隔缀。
'''
if printDialog.exec_():?
? ? ? ? ? # 創(chuàng)建一個(gè)QPainter對(duì)象,并指定繪圖設(shè)備為一個(gè)QPrinter對(duì)象傍菇。
painter=QPainter(printer)?
# 獲得QPainter對(duì)象的視口矩形
rect=painter.viewport()?
# 獲得圖像的大小
size=self.image.size()?
# 按照?qǐng)D形的比例大小重新設(shè)置視口矩形
size.scale(rect.size(),Qt.KeepAspectRatio)?
painter.setViewport(rect.x(),rect.y(),size.width(),size.height())?
# 設(shè)置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_())