【pyqt5学习】——利用Pyqt5连接打印机(QtPrintSupport、QPrintDialog、QPageSetupDialog)
2023-09-11 14:21:45 时间
目录
1、利用QtPrintSupport直接连接打印机——不常用
2、 打印对话框QPrintDialog、打印设置对话框QPageSetupDialog
注:QDialog.Accepted == printerDialog.exec()
打印结果——使用的是文本框自带的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 QPainter
import sys
class 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,QPageSetupDialog
import sys
class 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可以将文本框的所有内容打印出来,并且格式没有改变(会分段)
相关文章
- ElasticSearch快速学习
- Java学习(多表查询(内连接查询,外连接查询,子查询),事务(基本介绍,四大特征,隔离级别),DCL(管理用户,权限管理))
- C#学习资料
- MapReduce 学习(一)
- Deep Learning(深度学习)网络资源
- http性能测试工具wrk源码学习之开篇
- 【学习总结】SQL学习总结之SQL高级教程
- PHP连接数据库学习手册
- [ML] 深度学习的数学基础: 函数/参数优化/矩阵运算/向量化/卷积运算/张量运算
- Oracle性能优化学习笔记之WHERE子句中的连接顺序
- VB.net:VB.net编程语言学习之基于VS软件连接SQL Server(利用ADO.NET操作数据库/添加新数据源/DataGridView数据表格控件)的简介、案例应用之详细攻略
- 【阶段四】Python深度学习02篇:深度学习基础知识:神经网络可调超参数:优化器
- Java学习路线-23:比较器Comparable、Comparator、二叉树
- 《TPM原理及应用指南》学习 —— TPM执行环境1(1)
- 片上总线协议学习(1)——SiFive的TileLink与ARM系列总线的概述与对比
- WPF学习笔记二 依赖属性实现原理及性能分析
- Fate1.6 支持的机器学习算法
- 深度学习(4)之目标检测模型综述:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD
- Docker学习笔记09:docker使用之容器连接
- 深度学习3 迁移学习分批次保存特征并训练全连接
- MySQL学习8:连接查询
- 活动预告|AICon全球人工智能与机器学习技术大会
- Clojure 学习入门(7)- 连接mysql