最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于PyQt5制作一個PDF文件合并器

 更新時間:2022年03月03日 08:25:36   作者:Python?集中營  
PDF文件合并工具是非常好用可以把多個pdf文件合并成一個,本文將利用Python中的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鍵就可以選擇多個文件)。目標路徑是為了選擇存儲生成的后的合并文件的路徑的。選擇好之后點擊開始按鈕就可以調(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('目標路徑')
        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)文章

  • 怎么解決pycharm license Acti的方法

    怎么解決pycharm license Acti的方法

    這篇文章主要介紹了怎么解決pycharm license Acti的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • python copy模塊中的函數(shù)實例用法

    python copy模塊中的函數(shù)實例用法

    在本篇內(nèi)容里小編給大家整理了關(guān)于python copy模塊的基礎(chǔ)知識點及實例用法,有需要的朋友們可以跟著學習下。
    2021-09-09
  • openCV實踐項目之銀行卡卡號識別功能

    openCV實踐項目之銀行卡卡號識別功能

    最近在惡補opencv,在前期不太那么認真的學習狀態(tài)下,著手搞了一下這個小項目實戰(zhàn),基于模板匹配下的銀行卡卡號識別,下面這篇文章主要給大家介紹了關(guān)于openCV實踐項目之銀行卡卡號識別功能的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Python使用turtle模塊繪制愛心圖案

    Python使用turtle模塊繪制愛心圖案

    這篇文章主要為大家詳細介紹了Python使用turtle模塊繪制愛心圖案,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Python創(chuàng)建一個功能齊全的隨機驗證碼生成器

    Python創(chuàng)建一個功能齊全的隨機驗證碼生成器

    驗證碼通過生成一張包含難以識別的文本、數(shù)字或圖像的圖像,要求用戶正確輸入其中的內(nèi)容,用于驗證用戶身份,本篇教程將帶領(lǐng)您一步步使用Python創(chuàng)建一個功能齊全的隨機驗證碼生成器,我們將通過導(dǎo)入必要的庫、定義輔助函數(shù)以及編寫主函數(shù)check_code()
    2024-04-04
  • Django多數(shù)據(jù)庫配置及逆向生成model教程

    Django多數(shù)據(jù)庫配置及逆向生成model教程

    這篇文章主要介紹了Django多數(shù)據(jù)庫配置及逆向生成model教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python logging添加filter教程

    python logging添加filter教程

    今天小編就為大家分享一篇python logging添加filter教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Pandas對數(shù)值進行分箱操作的4種方法總結(jié)

    Pandas對數(shù)值進行分箱操作的4種方法總結(jié)

    分箱是一種常見的數(shù)據(jù)預(yù)處理技術(shù)有時也被稱為分桶或離散化,他可用于將連續(xù)數(shù)據(jù)的間隔分組到“箱”或“桶”中。本文將使用python?Pandas庫對數(shù)值進行分箱的4種方法,感興趣的可以了解一下
    2022-05-05
  • Python爬蟲模擬登陸嗶哩嗶哩(bilibili)并突破點選驗證碼功能

    Python爬蟲模擬登陸嗶哩嗶哩(bilibili)并突破點選驗證碼功能

    這篇文章主要介紹了Python爬蟲模擬登陸嗶哩嗶哩(bilibili)并突破點選驗證碼功能,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Python中Jieba進行詞頻統(tǒng)計與關(guān)鍵詞提取

    Python中Jieba進行詞頻統(tǒng)計與關(guān)鍵詞提取

    本文主要介紹了Python中Jieba進行詞頻統(tǒng)計與關(guān)鍵詞提取,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03

最新評論

湘阴县| 嘉义市| 大英县| 岑巩县| 尼玛县| 新余市| 阿巴嘎旗| 廉江市| 安徽省| 张家口市| 娄底市| 尖扎县| 新巴尔虎右旗| 武平县| 岫岩| 赣榆县| 台山市| 龙山县| 溆浦县| 同仁县| 城固县| 策勒县| 炉霍县| 平乐县| 宾阳县| 平武县| 婺源县| 重庆市| 广南县| 佛山市| 安达市| 堆龙德庆县| 古丈县| 汉沽区| 沐川县| 金山区| 米泉市| 呈贡县| 延庆县| 永兴县| 多伦县|