[aprendizaje de pyqt5] - Utilice Pyqt5 para conectarse a impresoras (QtPrintSupport, QPrintDialog, QPageSetupDialog)

Tabla de contenido

1. Utilice QtPrintSupport para conectarse directamente a la impresora (no se utiliza habitualmente)

1) Conocimientos básicos 

 2) Caso de código completo

3) Resultados 

2. Cuadro de diálogo de impresión QPrintDialog, cuadro de diálogo de configuración de impresión QPageSetupDialog

1) Abra el cuadro de diálogo de configuración de impresión.

2) Aparece el cuadro de diálogo de impresión.

Siguiente: QDialog.Accepted == printDialog.exec()

3) código completo 

detalles de la misión

código 

Ejecutar efecto de interfaz

 Haga clic en el efecto del botón "Abrir archivo"

Haga clic en el efecto del botón "Ventana emergente de configuración de impresión"

Editar 

Haga clic en el efecto del botón "Imprimir"

Editar 

 Resultados de impresión: utilizando el método de impresión (impresora) que viene con el cuadro de texto, simplemente imprime la entrada en la impresora.


1. Utilice QtPrintSupport para conectarse directamente a la impresora (no se utiliza habitualmente)

1) Conocimientos básicos 

Tres métodos para imprimir el contenido del cuadro de texto textEdit en PDF
Método 1: tome los datos del cuadro de texto como una imagen, pero solo se imprimirán los datos mostrados ####### 
# screen = self.text1.grab() 
# # Dibuja la imagen en la impresora 
# pintor .drawPixmap( 10,10,pantalla) # El punto de la esquina superior izquierda es (10,10) 

Método 2: Obtenga el contenido del cuadro de texto y dibújelo en la impresora. No se puede imprimir con formato y se imprimirá en una línea ## ##### 
# text = self.text1.toPlainText() 
# pintor.drawText(10,10,text) 

Método 3: llamar directamente a la impresión que viene con el cuadro de texto, falló ######### ###### 
self.text1.print(impresora)

nada imprime

 

 2) Caso de código completo

'''
直接调用打印机,利用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) Resultados 

 Eventualmente se generará un archivo pdf.

2. Cuadro de diálogo de impresión QPrintDialog, cuadro de diálogo de configuración de impresión QPageSetupDialog

1) Abra el cuadro de diálogo de configuración de impresión.

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

2) Aparece el cuadro de diálogo de impresión.

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

Siguiente: QDialog.Accepted == printDialog.exec()

PrinterDialog.exec() indica que el cuadro de diálogo está esperando la operación del usuario, si el usuario opera, devolverá un estado.

QDialog.Accepted indica que el usuario del cuadro de diálogo ha realizado una operación similar a Aceptar, como confirmar, imprimir, etc.

El significado de esta oración es que cuando el usuario hace clic en una determinada operación, como imprimir, se ejecutará el código debajo de la declaración if.

3) código completo 

detalles de la misión

'''
Tarea:
1. Abra el archivo y muestre el contenido del archivo en TextEdit;
2. Abra la ventana de configuración de la impresora y establezca los parámetros de impresión.
3. Abra la ventana de impresión e imprima el contenido del texto en TextEdit (aquí, imprimir en pdf) Ejemplo
'''

código 



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_()

Ejecutar efecto de interfaz

 Haga clic en el efecto del botón "Abrir archivo"

Después de seleccionar un archivo para abrir 

Haga clic en el efecto del botón "Ventana emergente de configuración de impresión"

Puede ver que puede configurar los márgenes de la página, el tamaño, la dirección, etc.

 

Haga clic en el efecto del botón "Imprimir"

Puede elegir una impresora. Aquí tomamos la salida como pdf como ejemplo.

 

 Resultados de impresión: utilizando el método de impresión (impresora) que viene con el cuadro de texto, simplemente imprime la entrada en la impresora.

self.textEdit.print(self.impresora)

Como puede ver, el pdf impreso puede imprimir todo el contenido del cuadro de texto y el formato no cambia (se segmentará) 

Supongo que te gusta

Origin blog.csdn.net/qq_45769063/article/details/124994996
Recomendado
Clasificación