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

举报
不脱发的程序猿 发表于 2021/10/28 23:04:54 2021/10/28
【摘要】 打印图像是图像处理软件中的一个常用功能,打印图像实际上是在QPaintDevice中画图,与平常在QWidget、QPixmap和Qlmage中画图一样,都是创建一个QPainter对象进行画图的,只是打印使用的是QPrinter,它本质上也是一个QPaintDevice(绘图设备)。 通过一个示例了解QPrinter打印图片类的使用...

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

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

实现代码如下所示:


  
  1. from PyQt5.QtCore import Qt
  2. from PyQt5.QtGui import QImage , QIcon, QPixmap
  3. from PyQt5.QtWidgets import QApplication , QMainWindow, QLabel, QSizePolicy , QAction
  4. from PyQt5.QtPrintSupport import QPrinter, QPrintDialog
  5. import sys
  6. class MainWindow(QMainWindow):
  7. def __init__(self,parent=None):
  8. super(MainWindow,self).__init__(parent)
  9. self.setWindowTitle(self.tr("打印图片"))
  10. # 创建一个放置图像的QLabel对象imageLabel,并将该QLabel对象设置为中心窗体。
  11. self.imageLabel=QLabel()
  12. self.imageLabel.setSizePolicy(QSizePolicy.Ignored,QSizePolicy.Ignored)
  13. self.setCentralWidget(self.imageLabel)
  14. self.image=QImage()
  15. # 创建菜单,工具条等部件
  16. self.createActions()
  17. self.createMenus()
  18. self.createToolBars()
  19. # 在imageLabel对象中放置图像
  20. if self.image.load("./2.jpg"):
  21. self.imageLabel.setPixmap(QPixmap.fromImage(self.image))
  22. self.resize(self.image.width(),self.image.height())
  23. def createActions(self):
  24. self.PrintAction=QAction(QIcon("./2.jpg"),self.tr("打印"),self)
  25. self.PrintAction.setShortcut("Ctrl+P")
  26. self.PrintAction.setStatusTip(self.tr("打印"))
  27. self.PrintAction.triggered.connect(self.slotPrint)
  28. def createMenus(self):
  29. PrintMenu=self.menuBar().addMenu(self.tr("打印"))
  30. PrintMenu.addAction(self.PrintAction)
  31. def createToolBars(self):
  32. fileToolBar=self.addToolBar("Print")
  33. fileToolBar.addAction(self.PrintAction)
  34. def slotPrint(self):
  35. # 新建一个QPrinter对象
  36. printer=QPrinter()
  37. # 创建一个QPrintDialog对象,参数为QPrinter对象
  38. printDialog=QPrintDialog(printer,self)
  39. '''
  40. 判断打印对话框显示后用户是否单击“打印”按钮,若单击“打印”按钮,
  41. 则相关打印属性可以通过创建QPrintDialog对象时使用的QPrinter对象获得,
  42. 若用户单击“取消”按钮,则不执行后续的打印操作。
  43. '''
  44. if printDialog.exec_():
  45. # 创建一个QPainter对象,并指定绘图设备为一个QPrinter对象。
  46. painter=QPainter(printer)
  47. # 获得QPainter对象的视口矩形
  48. rect=painter.viewport()
  49. # 获得图像的大小
  50. size=self.image.size()
  51. # 按照图形的比例大小重新设置视口矩形
  52. size.scale(rect.size(),Qt.KeepAspectRatio)
  53. painter.setViewport(rect.x(),rect.y(),size.width(),size.height())
  54. # 设置QPainter窗口大小为图像的大小
  55. painter.setWindow(self.image.rect())
  56. # 打印
  57. painter.drawImage(0,0,self.image)
  58. if __name__ == "__main__":
  59. app=QApplication(sys.argv)
  60. main=MainWindow()
  61. main.show()
  62. sys.exit(app.exec_())

文章来源: handsome-man.blog.csdn.net,作者:不脱发的程序猿,版权归原作者所有,如需转载,请联系作者。

原文链接:handsome-man.blog.csdn.net/article/details/121003705

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。