【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中的三種方法
方法一:將文本框數據作為一個圖像抓取過來,但是只有顯示的數據才會打印出來#######
# 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可以將文本框的所有內容打印出來,并且格式沒有改變(會分段)?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255351.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255351.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255351.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Val編程-按鍵響應模式

由于Val是通過語句gotoxy函數來進行光標移動的,不支持觸摸屏與鼠標,因此對于其界面編程有很大的局限。 一般有下面幾種模式來進行編程。 1.按鍵響應模式(中斷模式) 2.輪詢模式 一般推薦使用按鍵響應模式。其原理是對于有按鍵按下…

[Android]SQLite的使用

Android 數據存儲提供了四種存儲方式: Shared Preferences 使用鍵值對(Map(key, value))來存儲數據 Internal Storage 內部存儲,存儲在設備內存的 私人數據 External Storage 外部存儲,存儲在外部設備的 公共數據…

第一百四十五節,JavaScript,同步動畫

JavaScript,同步動畫 將上一節的,移動透明動畫,修改成可以支持同步動畫,也就是可以給這個動畫方法多個動畫任務,讓它同時完成 原理: 向方法里添加一個屬性,這個屬性是一個對象,同步動…

Exchange Server 2016管理系列課件39.新建本地移動請求

場景通過新建本地移動請求,可以很方便的將用戶郵箱從一個數據庫遷移到另外一個數據庫。1)跨平臺郵件遷移;(低exchange遷移到高版本exchange)2)數據庫平衡與優化;(企業當中&#xff0…

【數據庫學習】——【匯總】MySQL數據庫下載與安裝(Msi文件安裝和免安裝版本)、Navicat下載與安裝

目錄 1、MySQL數據庫下載與安裝 1)MySQL數據庫下載 MySQL官網 MySQL數據庫下載 2)MySQL 通過msi文件安裝 3)MySQL免安裝版本使用 1)將免安裝包移動到安裝的文件夾位置; 2)新建data文件夾 3&#xff…

Val編程-文本操作

Val系統相對于高級語言來說,對于文本操作的功能相當的弱。 一般的文本(文件夾)操作有: 1.新建文本, 2.刪除文本, 3.新建文件夾, 4.刪除文件夾, 5.文本重命名, 6.文…

Linux高級編程--01.vi命令

VI是Linux/Unix下標配的一個純字符界面的文本編輯器。由于不支持鼠標功能,也沒有圖形界面,相關的操作都要通過鍵盤指令來完成,需要記憶大量命令。因此很多人不大喜歡它,但同時由于鍵盤的方式往往比鼠標來得快,一旦熟練…

【數據庫學習】——糾錯:mysql Authentication plugin ‘caching_sha2_password‘ is not supported

目錄 1、環境介紹 2、問題描述 3、原因分析 4、 解決方案 1)方法一:直接改成mysql_native_password驗證方式 2)方案二: 利用sql命令將驗證機制修改 ① 打開命令行窗口——cmd ② 登錄mysql數據庫 ③ 查看不同用戶名的身份…

xcode中用pods管理第三方庫轉

安裝pods :http://www.cnblogs.com/wangluochong/p/5567082.html 史上最詳細的CocoaPods安裝教程 --------------------------------------------- 第一步:Cmmand+空格,搜索"終端",使用cd命令進入到我們項目…

Val編程-界面編程

由于示教盒是一個黑白的分辨率為(14*40)的液晶屏,用戶交互不是很好,界面不友好。而且沒有鼠標導航與觸摸屏。 界面編程函數 1.void cls() 2.void title(string sText) 3.void put(string sText), void put(num nValue) 4.void put…

【機器學習筆記四】分類算法 - 邏輯回歸

參考資料 【1】 Spark MLlib 機器學習實踐 【2】 統計學習方法 1、Logistic分布 設X是連續隨機變量,X服從Logistic分布是指X具有下列分布函數和密度函數 ,。其中u為位置參數,γ為形狀參數。如下圖: 分布函數以(u,1/2)為中心…

FPFH+ICP點云配準

A, UniformSampling降噪B, ISS計算關鍵點, FPFH特征在FeatureCloud::setInputCloud中讀入點云,并調用processInput進行處理:processInput處理包括: 1, computeSurfaceNormals () 使用NormalEstimation計算得到表面法向量2, computeLocalFeatures () FPFHEstimationKdTreeIS…

【python 學習】——pycharm終端解釋器和Python解釋器配置

目錄 1、pycharm終端運行的時候前面帶有PS,是什么意思,怎么變成cmd? 1)File——settings 2)tools——terminal——shellPath 2、pycharm怎么切換不同的Python解釋器? 1)File——settings 2&#xff09…

在linux下實現mysql自動備份數據

使用的系統為CentOS,mysql版本為5.6 備份功能主要利用以下功能實現: mysql命令中的mysqldump命令 linux下腳本編寫 linux下crontab定時任務的使用 首先確定你要存放腳本的目錄和存放備份數據的目錄 首先進行以下修改(因為在命令行或者腳本中寫…

面向未來編程

我們一直以來都知道面向對象編程,面向過程編程。大多數時候還是面向工資編程,面向生活編程。面向任務編程,面向公司編程,面向領導編程。 工資不給力,心里認為委屈;生活有壓力。影響工作情緒。任務完畢就好…

Plotclock

調試程序,運行調試程序,舵機會移動兩只懸臂分別停留在一只水平另一只垂直的位置上。如果差距非常大,可拆下懸臂調節,如果比較接近了,就修改程序第3~6行的四個參數 SERVOFAKTORLEFT 左懸臂垂直位置,SERVOFAK…

js性能優化--學習筆記

《高性能網站建設進階指南》: 1.使用局部變量,避免深入作用域查找,局部變量是讀寫速度最快的;把函數中使用次數超過一次的對象屬性和數組存儲為局部變量是一個好方法;比如for循環中的.length通常可以保存為局部變量。 …

struct和typedef struct在C與C++中用法

struct和typedef struct 分三塊來講述:   1 首先://注意在C和C里不同     在C中定義一個結構體類型要用typedef:     typedef struct Student    {    int a;    }Stu;     于是在聲明變量的時候就可:Stu stu1;(如…

【數據庫學習】——Python實現mysql數據庫SQL文件生成和導入

目錄 1、將mysql數據導出到SQL文件中(數據庫存在的情況) 2、將現有的sql文件數據導入到數據庫中(前提數據庫存在) 3、利用Navicat導出SQL文件和導入SQL文件 1)從數據庫導出SQL文件 2)導入SQL文件到數據…

lfcp——PB使用

場景:記錄以備忘。 1 直接說明 pb連接說明:目前項目共有性能、功能、業務、聯調四個環境。所以pb可以連接四個不同的數據庫。1.copy一份pb程序,修改main.ini文件中的DBCONNECT/DBCONNECT2位new,DBNAME/DBNAME2為oracle數據源中的源…