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

不脱发的程序猿 2021-10-28 03:58:56
Python Qt 设计 GUI qprinter

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

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

实现代码如下所示:

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_())
版权声明
本文为[不脱发的程序猿]所创,转载请带上原文链接,感谢
https://handsome-man.blog.csdn.net/article/details/121003705

  1. AI python课和 python课都是198 这两个课是同一个课程内容吗?有什么区别和相似点?
  2. python的__new__()疑问
  3. Python代码阅读(第24篇):根据筛选函数将列表元素分成两组
  4. python怎么实现动态障碍物按固定路径行走
  5. Python代码阅读(第24篇):根据筛选函数将列表元素分成两组
  6. Python题目,希望帮我解答一下辛苦
  7. python +selenium 如何获取下拉列表,默认选中值
  8. 有个pb文件做好的模型,对此模型的操作想用python封装成api,怎么做?
  9. 请问,mac的Pycharm中新建项目时候的Base interpreter选项里有两个Python3.8,该选哪个?
  10. python如何读取指定文件名的excel并分别汇总
  11. 如何写利用python将fastq文件转换成fasta文件的脚本
  12. python小工具
  13. 新猿0基础python教程 如何写好接口文档
  14. 请问我哪里错了呀,数值计算,python运算符号出错,但是我看不出来
  15. Python游戏开发,Pygame模块,Python从零开始带大家实现一个魔塔小游戏(2)
  16. Python爬虫实战,requests模块,Python实现抓取王者荣耀全套皮肤
  17. Python游戏开发,Pygame模块,Python从零开始带大家实现一个魔塔小游戏(3)
  18. 大神们这个问题用python怎么解决啊
  19. 简单理解python装饰器
  20. 货物托运收费问题用python 求解 一直输出错误
  21. 使用 Python 实现的卷积神经网络初学者指南
  22. 为什么Python中调用模块传递列表报错,而直接模块内调用列表就不会报错。
  23. 可视化 Python 打包 exe,这个神器绝了!
  24. 如此高效!数据科学中这4款 Python 神器真的很棒!
  25. 用 Python 开发交互式 Web 应用,So Easy
  26. Python多分类问题pr曲线绘制(含代码)
  27. 80 行 Python 代码搞定全国区划代码
  28. 有包含一阶贝塞尔函数的Python库吗
  29. Python输出乘法口诀表中的2d是什么意思
  30. Python 爬虫goole图片 使用selenium+chromedriver 出错DevToolsActivePort file doesn't exist
  31. python怎么做,我不会做,别走,留下代码!
  32. (数据科学学习手札129)geopandas 0.10版本重要新特性一览
  33. MySQL备份之xtrabackup(Python)
  34. (数据科学学习手札129)geopandas 0.10版本重要新特性一览
  35. Python:枚举列表中所有元素的可能组合
  36. 编写python 程序 人的心跳频率与温度的关系 计算人的累记心跳次数
  37. python相关,请问这张图里代码c for c in coinValueList if c<=change是什么意思
  38. Python中的分段函数问题求解
  39. Python中的递归求年龄问题
  40. python如何求出多个股票的移动均价
  41. 保姆级教程!将 Vim 打造一个 IDE (Python 篇)
  42. python给定两个函数和定义域,判定两个函数是否构造为复合函数。
  43. 求 python3.8 有条件的递增方法
  44. 如何让python的//运算得到一个小数点不是0的结果
  45. 关于#matlab# #算法# #python#的问题:校园导航制作
  46. python的字典编程练习。!
  47. Python类的实例化应用实现输入打印
  48. python的字典编程练习,!
  49. 调试来自于逐飞的MM32F3277移植有MicroPython开发板
  50. 求 python3.8 有条件的递增递减算法
  51. 如何才能在python中实现动态宽度对齐输出
  52. 14道Python基础练习题(附答案)
  53. python写一个正则,匹配内容以“关于”,(代转)开头的那句话,要怎么写正则?
  54. 来个Python能做的救救孩子.
  55. Python爬虫,写完程序获取不到结果,
  56. python for循环和while循环打印九九乘法表
  57. Python异常
  58. Python请设计一能产生某月份月历的程序,能提示用 户输入某月份第1天是星期几,并将该月份的月历打印出来,求
  59. Python入门语法(简洁不啰嗦)
  60. Python入门与各种系统安装部署应用