打印图像是图像处理软件中的一个常用功能,打印图像实际上是在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_())

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

  1. Python Qt GUI设计:QLabel标签类(基础篇—11)

    QLabel对象作为一个占位符可以显示不可编辑的文本或图片,也可以放置一个GIF动画,还可以被用作提示标记为其他控件,纯文本.链接或富文本可以显示在标签上. QLabel类中的常用方法如下表所示: Q ...

  2. Python Qt GUI设计:QTimer计时器类、QThread多线程类和事件处理类(基础篇—8)

    目录 1.QTimer计时器类 2.QThread多线程类 3.事件处理类 一般情况下,应用程序都是单线程运行的,但是对于GUI程序来说,单线程有时候满足不了需求.例如,如果需要执行一个特别耗时的操作 ...

  3. Python Qt GUI设计:QCalendar日历类和QDateTimeEdit时间类(基础篇—20)

    目录 1.QCalendar日历类 2.QDateTimeEdit时间类 1.QCalendar日历类 QCalendar是一个日历控件,它提供了一个基于月份的视图,允许用户通过鼠标或键盘选择日期,默 ...

  4. Python Qt GUI设计:QSpinBox计数器类(基础篇—15)

    QSpinBox是一个计数器控件,允许用户选择一个整数值,通过单击向上/向下按钮或按键盘上的上/下箭头来增加/减少当前显示的值,当然用户也可以输入值. 在默认情况下,QSpinBox的取值范围是0-9 ...

  5. Python Qt GUI设计:QComboBox下拉列表框类(基础篇—14)

    QComboBox是一个集按钮和下拉选项于一体的控件,也被称为下拉列表框. QComboBox类中的常用方法如下表所示: QComboBox类中的常用信号如下表所示: 来看看QComboBox按钮类的 ...

  6. Python Qt GUI设计:信号与槽的使用方法(基础篇—7)

    目录 1.信号与槽的概念 2.信号与槽的基础函数 2.1.创建信号函数 2.2.连接信号函数 2.3.断开信号函数 2.4.发射信号函数 3.信号和槽的使用方法 3.1.内置信号与槽的使用 3.2.自 ...

  7. Python Qt GUI设计:窗口布局管理方法【强化】(基础篇—6)

    目录 1. 水平布局类(QHBoxLayout) 2.垂直布局类(QVBoxLayout) 3.网格布局类(QGridLayout) 3.1.单一的网络布局 3.2.跨越行.列的网络布局 4.表单布局 ...

  8. Python Qt GUI设计:窗口布局管理方法【基础】(基础篇—5)

    目录 1.布局管理器进行布局 2.容器控件进行布局 3.geometry属性:控件绝对布局 4.sizePolicy属性:微调优化控件布局 Qt Designer提供4种窗口布局方式,分别如下: Ve ...

  9. Python Qt GUI设计:QPushButton、QRadioButton和QCheckBox按钮类(基础篇—12)

    目录 1.QPushButton按钮类 2.QRadioButton按钮类 3.QCheckBox按钮类 在GUI设计中,按钮都是最重要的和常用的触发动作请求的方式,用来与用户进行交互操作.在PyQt ...

最新文章

  1. 京东智能内容创作算法的演进与实践:基于关键词自动生成摘要
  2. 【Python-ML】SKlearn库集成学习器Boosting
  3. android studio selector 插件,Android Studio 常用插件
  4. 用博奥如何导入单项工程电子表_用博奥如何导入单项工程电子表_博奥常见问题处理汇总...
  5. “读书人”的事儿,能叫抄吗?
  6. Scala父类和父特质的执行顺序
  7. 【C++ grammar】引用
  8. STL中的set/map
  9. 禁止i5笔记本按Ctrl+Alt+向下键翻转屏幕
  10. Android集成一个新产品时,lunch的product name和device name注意事项
  11. cvMat结构体详解
  12. 6.2.2 构造函数模式
  13. 将中缀表达式转换为前缀表达式:
  14. ActiveMQ 下载和安装
  15. 推荐一款免费开源的javascript电子表格:x-sheet
  16. matlab的yalmip为什么这么慢,Yalmip使用学习
  17. 付费应用程序协议下载 苹果_苹果商店 付费app协议填写 apple苹果IOS内购申请教程协议、税务和银行业务配置...
  18. Mac如何破解管理员密码
  19. 华为S5700交换机开启Telnet和SSH服务
  20. 唯我倾城网上购物商城设计与实现

热门文章

  1. TCP/UDP协议基本概念
  2. oracle 开链,欧链OracleChain开启Dapps应用新时代
  3. float js 正则 验证_使用HTML和Vuejs进行表单验证
  4. RxJava 操作符 do
  5. CSS盒模型( CSS margin 属性)
  6. spring boot 启动不连接数据库
  7. @Controller和@RestController的区别?
  8. 【动态规划】Part1
  9. 机器学习模型质量评价标准 — 精准率、召回率
  10. DailyTick 开发实录 —— UI 设计