基于PyQt5制作一個PDF文件合并器
操作說明:選擇多個PDF文件,執(zhí)行完合并后會生成一個新的PDF文件,這個新的PDF文件包含所有源PDF文件的頁面。
將相關(guān)的三方模塊導(dǎo)入到代碼塊中...
from PyQt5.QtWidgets import * from PyQt5.QtGui import * from PyQt5.QtCore import * import sys import os import PyPDF2 # PDF操作庫
QThread是PyQt5的子線程應(yīng)用,之前已經(jīng)使用過比較多的次數(shù)了。一般使用時通過創(chuàng)建一個類專門處理線程相關(guān)的邏輯。注意在這個類上面繼承 QThread,創(chuàng)建好之后里面的函數(shù)應(yīng)用范式基本都是不會改變的。一個__ init__ 函數(shù)用來初始化、另一個 del 函數(shù)控制線程的銷毀,還有一個run函數(shù)用來編寫線程里面的業(yè)務(wù)邏輯。
這里面定義了一個信號量finished
finished = pyqtSignal(bool)
這個變量主要是為了在子線程執(zhí)行完成時向主線程傳送變量值。這樣,主線程就知道子線程的執(zhí)行狀態(tài)。
class WorkThread(QThread): finished = pyqtSignal(bool) def __init__(self, parent=None): super(WorkThread, self).__init__(parent) self.parent = parent self.working = True def __del__(self): self.working = False self.wait() def run(self): pdf_files_path = self.parent.pdf_files_path.text().strip() pdf_tar_dir = self.parent.pdf_tar_dir.text().strip() file_list = pdf_files_path.split(',') merge = PyPDF2.PdfFileMerger() for file in file_list: merge.append(PyPDF2.PdfFileReader(file)) merge.write(pdf_tar_dir + '/匯總.pdf') self.finished.emit(True)
編寫UI界面,界面上的UI組件比較少,源文件按鈕是為了選擇需要合并的PDF文件(支持多選,選擇文件時按住Ctrl鍵就可以選擇多個文件)。目標(biāo)路徑是為了選擇存儲生成的后的合并文件的路徑的。選擇好之后點擊開始按鈕就可以調(diào)用子線程去執(zhí)行PDF文件合并操作了。
class PDFMerge(QWidget): def __init__(self): super(PDFMerge, self).__init__() self.init_ui() def init_ui(self): self.setWindowTitle('PDF文件合并器 公眾號:[Python 集中營]') self.setWindowIcon(QIcon('pdf.ico')) self.setFixedWidth(500) self.setFixedHeight(120) grid = QGridLayout() self.pdf_files_path = QLineEdit() self.pdf_files_path.setReadOnly(True) self.pdf_files_btn = QPushButton() self.pdf_files_btn.setText('源文件') self.pdf_files_btn.clicked.connect(self.pdf_files_btn_click) self.pdf_tar_dir = QLineEdit() self.pdf_tar_dir.setReadOnly(True) self.pdf_tar_btn = QPushButton() self.pdf_tar_btn.setText('目標(biāo)路徑') self.pdf_tar_btn.clicked.connect(self.pdf_tar_btn_click) self.start_btn = QPushButton() self.start_btn.setText('開始合并吧') self.start_btn.clicked.connect(self.start_btn_click) grid.addWidget(self.pdf_files_path, 0, 0, 1, 1) grid.addWidget(self.pdf_files_btn, 0, 1, 1, 1) grid.addWidget(self.pdf_tar_dir, 1, 0, 1, 1) grid.addWidget(self.pdf_tar_btn, 1, 1, 1, 1) grid.addWidget(self.start_btn, 2, 0, 1, 2) self.thread_ = WorkThread(self) self.thread_.finished.connect(self.finished) self.setLayout(grid) def pdf_files_btn_click(self): files = QFileDialog.getOpenFileNames(self, os.getcwd(), '打開文件', 'PDF Files(*.pdf)') file_list = files[0] self.pdf_files_path.setText(','.join(file_list)) def pdf_tar_btn_click(self): dir = QFileDialog.getExistingDirectory(self, os.getcwd(), '打開文件夾') self.pdf_tar_dir.setText(dir) def start_btn_click(self): self.start_btn.setEnabled(False) self.thread_.start() def finished(self, finished): if finished is True: self.start_btn.setEnabled(True)
通過main函數(shù)啟動應(yīng)用...
if __name__ == '__main__': app = QApplication(sys.argv) main = PDFMerge() main.show() sys.exit(app.exec_())
將上述所有代碼塊copy到一個.py的python文件中,直接啟動即可運行。
到此這篇關(guān)于基于PyQt5制作一個PDF文件合并器的文章就介紹到這了,更多相關(guān)PyQt5 PDF文件合并內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python網(wǎng)絡(luò)爬蟲之獲取網(wǎng)絡(luò)數(shù)據(jù)
本文介紹了Python中用于獲取網(wǎng)絡(luò)數(shù)據(jù)的重要工具之一——Requests庫,詳細(xì)講解了Requests庫的基本使用方法、請求方法、請求頭、請求參數(shù)、Cookies、Session等內(nèi)容,并結(jié)合實例代碼展示了Requests庫的應(yīng)用場景2023-04-04Windows8下安裝Python的BeautifulSoup
這篇文章主要介紹了Windows8下安裝Python的BeautifulSoup,本文著重講解安裝中出現(xiàn)的錯誤和解決方法,需要的朋友可以參考下2015-01-01Pycharm沒有報錯提示(誤觸ignore)的完美解決方案
這篇文章主要介紹了Pycharm沒有報錯提示(誤觸ignore)的解決方案,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-12-12如何用tempfile庫創(chuàng)建python進(jìn)程中的臨時文件
這篇文章主要介紹了如何用tempfile庫創(chuàng)建python進(jìn)程中的臨時文件,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-01-01