Pyqt应用相关之PDF汇总案例说明

        相信有不少小伙伴遇到了想要把多份pdf汇总到一起的问题,本期就带来用Pyqt界面制作的关于pdf汇总的教学流程。

def pdf_files_btn_click(self):
        files = QFileDialog.getOpenFileNames(self, os.getcwd(), 'opentxt', 'PDF Files(*.pdf)')
        file_list = files[0]
        self.pdf_files_path.setText(','.join(file_list))

该函数实现了打开指定路径下的所有PDF文件,并将它们显示在一个列表中的功能。具体实现过程如下:

  1. 使用QFileDialog类打开文件对话框,并指定打开文件的路径和文件类型。
  2. 使用os模块获取当前工作目录。
  3. 使用列表推导式将文件名列表转换为逗号分隔的字符串。
  4. 将文件名列表设置为文本框的文本。

    def pdf_tar_btn_click(self):
        dir = QFileDialog.getExistingDirectory(self, os.getcwd(), 'openlab')
        self.pdf_tar_dir.setText(dir)

该函数实现了打开指定路径下的所有PDF文件,并将它们显示在一个列表中的功能。具体实现过程如下:

  1. 使用QFileDialog类打开文件对话框,并指定打开文件的路径和文件类型。
  2. 使用os模块获取当前工作目录。
  3. 使用列表推导式将文件名列表转换为逗号分隔的字符串。
  4. 将文件名列表设置为文本框的文本。
  5. 使用QFile类打开指定路径下的所有PDF文件,并将它们显示在一个列表中。
    def start_btn_click(self):
        self.start_btn.setEnabled(False)
        self.thread_.start()

该函数实现了启动一个新线程来执行一个函数的功能。在该函数中,首先设置启动按钮的可用性为False,然后调用线程的start()方法来启动线程。在线程启动后,该函数将不再被调用。

    def finished(self, finished):
        if finished is True:
            self.start_btn.setEnabled(True)

该函数是一个自定义的Python函数,用于处理一个布尔值参数finished,并在函数执行完毕后执行相应的操作。在该函数中,首先判断参数finished是否为True,如果是,则设置启动按钮的可用性为True,以便用户可以继续执行其他操作。

汇总代码: 

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
import os
import PyPDF2  # PDF操作库

finished = pyqtSignal(bool)

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.PdfMerger()
        for file in file_list:
            merge.append(PyPDF2.PdfReader(file))
        merge.write(pdf_tar_dir + '/sum.pdf')

        self.finished.emit(True)

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

    def init_ui(self):
        self.setWindowTitle('PDF sum')
        self.setFixedWidth(600)
        self.setFixedHeight(300)

        grid = QGridLayout()

        self.pdf_files_path = QLineEdit()
        self.pdf_files_path.setReadOnly(True)

        self.pdf_files_btn = QPushButton()
        self.pdf_files_btn.setText('sourse')
        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('targetload')
        self.pdf_tar_btn.clicked.connect(self.pdf_tar_btn_click)

        self.start_btn = QPushButton()
        self.start_btn.setText('start')
        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(), 'opentxt', '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(), 'openlab')
        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)

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

猜你喜欢

转载自blog.csdn.net/yyfloveqcw/article/details/130286161
今日推荐