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

基于PyQt5制作一個(gè)PDF文件合并器

 更新時(shí)間:2022年03月03日 08:25:36   作者:Python?集中營  
PDF文件合并工具是非常好用可以把多個(gè)pdf文件合并成一個(gè),本文將利用Python中的PyQT5模塊,制作一個(gè)簡易的PDF文件合并器,感興趣的可以了解一下

操作說明:選擇多個(gè)PDF文件,執(zhí)行完合并后會(huì)生成一個(gè)新的PDF文件,這個(gè)新的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ù)了。一般使用時(shí)通過創(chuàng)建一個(gè)類專門處理線程相關(guān)的邏輯。注意在這個(gè)類上面繼承 QThread,創(chuàng)建好之后里面的函數(shù)應(yīng)用范式基本都是不會(huì)改變的。一個(gè)__ init__ 函數(shù)用來初始化、另一個(gè) del 函數(shù)控制線程的銷毀,還有一個(gè)run函數(shù)用來編寫線程里面的業(yè)務(wù)邏輯。

這里面定義了一個(gè)信號(hào)量finished

finished = pyqtSignal(bool)

這個(gè)變量主要是為了在子線程執(zhí)行完成時(shí)向主線程傳送變量值。這樣,主線程就知道子線程的執(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文件(支持多選,選擇文件時(shí)按住Ctrl鍵就可以選擇多個(gè)文件)。目標(biāo)路徑是為了選擇存儲(chǔ)生成的后的合并文件的路徑的。選擇好之后點(diǎn)擊開始按鈕就可以調(diào)用子線程去執(zhí)行PDF文件合并操作了。

class PDFMerge(QWidget):
    def __init__(self):
        super(PDFMerge, self).__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('PDF文件合并器  公眾號(hào):[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ù)啟動(dòng)應(yīng)用...

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = PDFMerge()
    main.show()
    sys.exit(app.exec_())

將上述所有代碼塊copy到一個(gè).py的python文件中,直接啟動(dòng)即可運(yùn)行。

到此這篇關(guān)于基于PyQt5制作一個(gè)PDF文件合并器的文章就介紹到這了,更多相關(guān)PyQt5 PDF文件合并內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 怎么解決pycharm license Acti的方法

    怎么解決pycharm license Acti的方法

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

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

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

    openCV實(shí)踐項(xiàng)目之銀行卡卡號(hào)識(shí)別功能

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

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

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

    Python創(chuàng)建一個(gè)功能齊全的隨機(jī)驗(yàn)證碼生成器

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

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

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

    python logging添加filter教程

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

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

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

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

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

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

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

最新評論

开封县| 玉林市| 石楼县| 合水县| 昆山市| 普陀区| 锡林浩特市| 凌云县| 伊通| 仲巴县| 色达县| 海丰县| 富平县| 双城市| 宜川县| 贵阳市| 天气| 洛浦县| 安庆市| 社旗县| 大足县| 陇西县| 余江县| 长丰县| 民权县| 康乐县| 兴隆县| 枣庄市| 呼玛县| 安西县| 友谊县| 蓬莱市| 屯留县| 芮城县| 平江县| 宁明县| 左云县| 景泰县| 南和县| 辉南县| 福清市|