[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 に印刷する 3 つの方法
方法 1: テキスト ボックス データを画像として取得しますが、表示されているデータのみが印刷されます ####### 
# screen = self.text1.grab() 
# # 画像をプリンタに描画します
# Painter .drawPixmap( 10,10,screen) # 左上隅の点は (10,10) です

方法 2: テキスト ボックスの内容を取得してプリンターに描画します。書式付きで印刷することはできず、1 行に印刷されます ## ##### 
# text = self.text1.toPlainText() 
#painter.drawText(10,10,text)

方法 3: テキスト ボックスに付属の印刷を直接呼び出す、失敗しました ######### ###### 
self.text1.print(プリンター)

何も印刷されない

 

 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 は、ダイアログ ボックスのユーザーが確認や印刷など、OK と同様の操作を実行したことを示します。

この文の意味は、ユーザーが印刷などの特定の操作をクリックすると、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 はテキスト ボックスのすべての内容を印刷でき、形式は変わりません (分割されます)。 

おすすめ

転載: blog.csdn.net/qq_45769063/article/details/124994996