目錄
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可以將文本框的所有內容打印出來,并且格式沒有改變(會分段)?