Python/pyqt5/CODE/qt04x範例程式/qt04_painter.py

81 lines
2.7 KiB
Python
Raw Permalink Normal View History

# -*- coding: utf-8 -*-
"""
簡介
列印圖片範例
"""
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("列印圖片"))
# 建立一個置放圖形的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("./images/screen.png"):
self.imageLabel.setPixmap(QPixmap.fromImage(self.image))
self.resize(self.image.width(),self.image.height())
def createActions(self):
self.PrintAction=QAction(QIcon("./images/printer.png"),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_())