【pyqt5学习】——利用Pyqt5连接打印机(QtPrintSupport、QPrintDialog、QPageSetupDialog)

目录

1、利用QtPrintSupport直接连接打印机——不常用

1)基本知识 

 2)完整代码案例

3)结果 

2、 打印对话框QPrintDialog、打印设置对话框QPageSetupDialog

1)弹出打印设置对话框

2)弹出打印对话框

注:QDialog.Accepted == printerDialog.exec()

3)完整代码 

任务描述

代码 

运行界面效果

 点击“打开文件”按钮效果

点击“弹出打印设置窗口”按钮效果

​编辑 

点击“打印”按钮效果

​编辑 

 打印结果——使用的是文本框自带的print(printer)方法,只是打印输入到了打印机


1、利用QtPrintSupport直接连接打印机——不常用

1)基本知识 

将textEdit文本框中的内容打印到pdf中的三种方法
方法一:将文本框数据作为一个图像抓取过来,但是只有显示的数据才会打印出来#######
# screen = self.text1.grab()
# # 将图像绘制到打印机上
# painter.drawPixmap(10,10,screen) # 左上角点为(10,10)方法二:获取文本框的内容,绘制到打印机中,无法带格式打印,会打印在一行#######
# text = self.text1.toPlainText()
# painter.drawText(10,10,text)方法三:直接调用文本框自带的打印,失败###############
self.text1.print(printer)

没有任何东西打印

 

 2)完整代码案例

'''
直接调用打印机,利用QPainter和QtPrintSupport()实现
'''
from PyQt5 import QtWidgets,QtPrintSupport
from PyQt5.QtWidgets import QPushButton,QTextEdit,QVBoxLayout
from PyQt5.QtGui import QPainterimport sysclass printSupportDemo(QtWidgets.QWidget):def __init__(self):super(printSupportDemo, self).__init__()layout = QVBoxLayout()self.btn1 = QPushButton("打印")self.text1 = QTextEdit()self.text1.setText("123\n\n\ntest\n\n\ntest\ntest\ntest\ntest\n---------------------\ntest\ntest\ntest\ntest\n---------------------")self.btn1.clicked.connect(self.printText)layout.addWidget(self.btn1)layout.addWidget(self.text1)self.setLayout(layout)# 打印def printText(self):# 获取打印机对象printer = QtPrintSupport.QPrinter()# 创建一个画布——因为打印其实就是将打印区域变成一个图像,然后逐像素打印在纸上painter = QPainter() ## 将画布设置在打印机上# 将画布设置在打印机上painter.begin(printer)###################方法一:将文本框数据作为一个图像抓取过来,但是只有显示的数据才会打印出来######## screen = self.text1.grab()# # 将图像绘制到打印机上# painter.drawPixmap(10,10,screen) # 左上角点为(10,10)###################方法二:获取文本框的内容,绘制到打印机中,无法带格式打印,会打印在一行######## text = self.text1.toPlainText()# painter.drawText(10,10,text)##################方法三:直接调用文本框自带的打印,失败###############self.text1.print(printer)# 结束打印painter.end()if __name__ == '__main__':app = QtWidgets.QApplication(sys.argv)mainWin = printSupportDemo()mainWin.show()app.exec_()

3)结果 

 最终会输出一个pdf文件

2、 打印对话框QPrintDialog、打印设置对话框QPageSetupDialog

1)弹出打印设置对话框

	def showSettingsDialog(self):settingsDialog = QPageSetupDialog(self.printer,self) # 在当前窗口针对打印机对象弹出设置对话框settingsDialog.exec() # 循环

2)弹出打印对话框

	def showPrintDialog(self):printerDialog = QPrintDialog(self.printer,self) # 在当前窗口针对打印机对象弹出打印对话框# printerDialog.exec()表示等待用户的操作,QDialog.Accepted表示用户操作了类似于确认的操作,当用户的操作时确认的操作时,执行if下面的语句if QDialog.Accepted == printerDialog.exec():self.textEdit.print(self.printer)

注:QDialog.Accepted == printerDialog.exec()

printerDialog.exec()表示对话框在等待用户的操作,用户操作了会返回一个状态

QDialog.Accepted表示对话框用户执行了一个类似于确定的操作,如确认、打印等

该句的意义就是当用户点击了打印这种确定的操作就会执行if语句下面的代码

3)完整代码 

任务描述

'''
任务:
1、打开文件将文件内容显示在TextEdit上;
2、弹出打印机设置窗口,对打印参数进行设置
3、弹出打印窗口,将TextEdit中的文本内容打印出来(这里以打印成pdf为例
'''

代码 

from PyQt5.QtWidgets import QWidget,QPushButton,QTextEdit,QVBoxLayout,QFileDialog,QDialog
from PyQt5.QtPrintSupport import QPrinter,QPrintDialog,QPageSetupDialogimport sysclass printDialogDemo(QWidget):def __init__(self):super(printDialogDemo, self).__init__()# 创建打印机对象self.printer = QPrinter()# 创建三个按钮self.btn1 = QPushButton("打开文件") # 打开文件并且将文件内容显示在TextEdit中self.btn2 = QPushButton("弹出打印设置窗口") # 弹出打印设置窗口self.btn3 = QPushButton("打印") # 进行打印# 创建文本框,用于显示打印的文本内容self.textEdit = QTextEdit()# 设置垂直布局将控件放入layout = QVBoxLayout()layout.addWidget(self.btn1)layout.addWidget(self.btn2)layout.addWidget(self.btn3)layout.addWidget(self.textEdit)# 将布局设置在窗口self.setLayout(layout)self.setWindowTitle("利用PyQt5进行文件打印")# 按钮设置槽函数self.btn1.clicked.connect(self.openFile)self.btn2.clicked.connect(self.showSettingsDialog)self.btn3.clicked.connect(self.showPrintDialog)def openFile(self):fname = QFileDialog.getOpenFileName(self,"打开文件",".")if fname[0]:# 打开文件,将文件的内容显示在文本框中with open(fname[0],'r',encoding="utf-8") as f:self.textEdit.setText(f.read())def showSettingsDialog(self):settingsDialog = QPageSetupDialog(self.printer,self) # 在当前窗口针对打印机对象弹出设置对话框settingsDialog.exec() # 循环def showPrintDialog(self):printerDialog = QPrintDialog(self.printer,self) # 在当前窗口针对打印机对象弹出打印对话框# printerDialog.exec()表示等待用户的操作,QDialog.Accepted表示用户操作了类似于确认的操作,当用户的操作时确认的操作时,执行if下面的语句if QDialog.Accepted == printerDialog.exec():self.textEdit.print(self.printer)if __name__ == '__main__':app = QtWidgets.QApplication(sys.argv)mainWin = printDialogDemo()mainWin.show()app.exec_()

运行界面效果

 点击“打开文件”按钮效果

选择一个文件打开后 

点击“弹出打印设置窗口”按钮效果

可以看得可以设置页面边距、大小、方向等

 

点击“打印”按钮效果

可以选择打印机,这里以输出为pdf为例

 

 打印结果——使用的是文本框自带的print(printer)方法,只是打印输入到了打印机

self.textEdit.print(self.printer)

可以看到,打印出来的pdf可以将文本框的所有内容打印出来,并且格式没有改变(会分段) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Exchange Server 2016管理系列课件39.新建本地移动请求

场景通过新建本地移动请求,可以很方便的将用户邮箱从一个数据库迁移到另外一个数据库。1)跨平台邮件迁移;(低exchange迁移到高版本exchange)2)数据库平衡与优化;(企业当中&#xff0…

【数据库学习】——【汇总】MySQL数据库下载与安装(Msi文件安装和免安装版本)、Navicat下载与安装

目录 1、MySQL数据库下载与安装 1)MySQL数据库下载 MySQL官网 MySQL数据库下载 2)MySQL 通过msi文件安装 3)MySQL免安装版本使用 1)将免安装包移动到安装的文件夹位置; 2)新建data文件夹 3&#xff…

【数据库学习】——纠错:mysql Authentication plugin ‘caching_sha2_password‘ is not supported

目录 1、环境介绍 2、问题描述 3、原因分析 4、 解决方案 1)方法一:直接改成mysql_native_password验证方式 2)方案二: 利用sql命令将验证机制修改 ① 打开命令行窗口——cmd ② 登录mysql数据库 ③ 查看不同用户名的身份…

xcode中用pods管理第三方库转

安装pods :http://www.cnblogs.com/wangluochong/p/5567082.html 史上最详细的CocoaPods安装教程 --------------------------------------------- 第一步:Cmmand+空格,搜索"终端",使用cd命令进入到我们项目…

Val编程-界面编程

由于示教盒是一个黑白的分辨率为(14*40)的液晶屏,用户交互不是很好,界面不友好。而且没有鼠标导航与触摸屏。 界面编程函数 1.void cls() 2.void title(string sText) 3.void put(string sText), void put(num nValue) 4.void put…

【机器学习笔记四】分类算法 - 逻辑回归

参考资料 【1】 Spark MLlib 机器学习实践 【2】 统计学习方法 1、Logistic分布 设X是连续随机变量,X服从Logistic分布是指X具有下列分布函数和密度函数 ,。其中u为位置参数,γ为形状参数。如下图: 分布函数以(u,1/2)为中心…

FPFH+ICP点云配准

A, UniformSampling降噪B, ISS计算关键点, FPFH特征在FeatureCloud::setInputCloud中读入点云,并调用processInput进行处理:processInput处理包括: 1, computeSurfaceNormals () 使用NormalEstimation计算得到表面法向量2, computeLocalFeatures () FPFHEstimationKdTreeIS…

【python 学习】——pycharm终端解释器和Python解释器配置

目录 1、pycharm终端运行的时候前面带有PS,是什么意思,怎么变成cmd? 1)File——settings 2)tools——terminal——shellPath 2、pycharm怎么切换不同的Python解释器? 1)File——settings 2&#xff09…

Plotclock

调试程序,运行调试程序,舵机会移动两只悬臂分别停留在一只水平另一只垂直的位置上。如果差距非常大,可拆下悬臂调节,如果比较接近了,就修改程序第3~6行的四个参数 SERVOFAKTORLEFT 左悬臂垂直位置,SERVOFAK…

【数据库学习】——Python实现mysql数据库SQL文件生成和导入

目录 1、将mysql数据导出到SQL文件中(数据库存在的情况) 2、将现有的sql文件数据导入到数据库中(前提数据库存在) 3、利用Navicat导出SQL文件和导入SQL文件 1)从数据库导出SQL文件 2)导入SQL文件到数据…

【重磅】Google官方推出了免费的、中文的、机器学习初级课程。

2019独角兽企业重金招聘Python工程师标准>>> 机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及…

市面上常见arduino版本比较

http://arduino.cc/en/Main/Products 详细链接 如果是入门,那么首选UNO R3,方便又省心 如果不是特殊要求,不建议购买2560,因为贵啊 nano是块很好的控制器,买不买随你咯 非特殊场合使用不建…

HALCON示例程序autobahn高速公路车道识别程序剖析

HALCON示例程序autobahn高速公路车道识别程序剖析 小哥哥小姐姐觉得有用点个赞呗! 示例程序源码(加注释) *关闭halcon窗口的实时更新 dev_update_window (‘off’) *关闭halcon图形窗口 dev_close_window () *打开图形窗口 *dev_open_win…

CSS中的未定义行为,浏览器的差异(一)

今天看了张鑫旭大佬的新书的有感吧,记录一下。 Web标准未对一些场景做出明确规范,所以各大浏览器厂家只能根据自己的理解和喜好去实现,表现差异不是浏览器的bug,用计算机领域的术语描述为"未定义行为"。 比如一个例子&a…

Atmel megaAVR控制器 串行引导Bootloader

开始研究下Bootloader的代码结构 2015.1.9 粗略看了下,Bootloader主要做了下板卡的初始化 -----> 然后进入for( ; ; )死循环 -----> 循环刷新串口数据 -----> 根据数据做出不同应答 -----> 如果有写数据,则将数据存入buffer …

MapReduce入门2-流量监控

3、流量监控汇总(使用LongWritable实现) hdfs文件路径:/tmp/flow.txt 查看文件内容: 13770759991 50 100 25 400 13770759991 800 600 500 100 13770759992 400 300 250 1400 13770759992 800 1200 600 900字符串含义:…

【fiddler学习问题记录】——手机端证书下载页打不开、无法将此证书安装(已解决)

目录 1、手机端下载页打不开 解决方法1)电脑端——将网络设置成公用(亲测有效) 解决方法2)手机端将fiddler设置为信任应用,不被拦截 (未试) 2、无法将此证书安装 方法一:修改证书…

舵机的原理和控制

控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出…

HDFS清理坏块

报错 Failed with exception java.io.IOException:org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-1921057509-192.168.57.129-1517160177567:blk_1073741930_1106 file/user/hive/warehouse/db_hive.db/student/student.txt Time taken: 0.104 se…

如何在PowerDesigner将PDM导出生成WORD文档或者html文件

a) 使用PowerDesigner打开pdm文件 b) 点击Report Temlates 制作模板 点击PowerDesigner菜单栏“Report” -> “Report Templates” c) 选择模板数据项 完成步骤a),得到如下界面,左右2个区,Aavailable区…