目录
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可以将文本框的所有内容打印出来,并且格式没有改变(会分段)