Python Qt GUI设计:QPrinter打印图片类(基础篇—21)

打印图像是图像处理软件中的一个常用功能,打印图像实际上是在QPaintDevice中画图,与平常在QWidget、QPixmap和Qlmage中画图一样,都是创建一个QPainter对象进行画图的,只是打印使用的是QPrinter,它本质上也是一个QPaintDevice(绘图设备)。

通过一个示例了解QPrinter打印图片类的使用,效果如下所示:

实现代码如下所示:

```python 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("./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_()) ```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_44079197

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值