PyQt写一个扫描文件夹下多个pdf文档的程序,并把文档的名字放到excel文件中,带有文本框和两个按钮,分别为扫描和取消
时间: 2024-10-16 20:17:58 浏览: 4
在Python中,我们可以使用PyQt库(结合PDF处理库如`PyPDF2`和Excel操作库如`pandas`和`openpyxl`)来创建一个简单的GUI应用,用于扫描指定目录下的PDF文件并将文件名添加到Excel表格中。以下是一个基础的示例代码:
```python
import os
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QLineEdit, QPushButton, QMessageBox
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QThread, pyqtSignal
import PyPDF2
import pandas as pd
class PDFScanner(QThread):
file_names_signal = pyqtSignal(list)
def __init__(self, directory_path, parent=None):
super().__init__(parent)
self.directory_path = directory_path
def run(self):
file_list = [f for f in os.listdir(self.directory_path) if f.endswith('.pdf')]
self.file_names_signal.emit(file_list)
class ExcelWriter(QThread):
finished_signal = pyqtSignal()
def __init__(self, file_list, excel_writer_func, parent=None):
super().__init__(parent)
self.file_list = file_list
self.excel_writer_func = excel_writer_func
def run(self):
df = pd.DataFrame({'File Name': self.file_list})
self.excel_writer_func(df)
self.finished_signal.emit()
def write_to_excel(file_list, app):
# 假设excel_writer_func是一个接受DataFrame并写入Excel的方法
wb = pd.ExcelWriter('file_list.xlsx', engine='openpyxl')
df.to_excel(wb, index=False)
wb.save()
QMessageBox.information(app, '完成', 'PDF文件已成功添加到Excel')
app = QApplication([])
main_window = QWidget()
main_window.setWindowTitle('PDF文件扫描器')
main_window.setWindowIcon(QIcon('path_to_icon.ico')) # 请替换为实际图标路径
layout = QVBoxLayout(main_window)
# 输入文件夹路径的输入框
dir_label = QLabel('选择文件夹:')
dir_input = QLineEdit()
button_scan = QPushButton('扫描', clicked=lambda: start_scanning(dir_input.text(), main_window))
button_cancel = QPushButton('取消', disabled=True)
# 显示结果区域
result_label = QLabel('扫描结果将在下方显示')
# 连接信号和槽
button_scan.clicked.connect(lambda: start_scanning(dir_input.text(), main_window))
PDFScanner.file_names_signal.connect(display_results)
ExcelWriter.finished_signal.connect(stop_scanning)
layout.addWidget(dir_label)
layout.addWidget(dir_input)
layout.addWidget(button_scan)
layout.addWidget(button_cancel)
layout.addWidget(result_label)
def start_scanning(directory, parent_window):
pdf_thread = PDFScanner(directory)
pdf_thread.start()
pdf_thread.file_names_signal.connect(parent_window.update_result_label)
def display_results(file_names):
result_label.setText(f'找到的PDF文件:{", ".join(file_names)}')
def stop_scanning():
button_scan.setEnabled(True)
button_cancel.setEnabled(False)
# 初始化按钮禁用状态
button_scan.setEnabled(False)
button_cancel.setEnabled(False)
main_window.setLayout(layout)
main_window.show()
if __name__ == '__main__':
app.exec_()
```
在这个示例中,我们创建了一个包含输入文件夹、扫描按钮和结果显示区域的窗口。当点击“扫描”按钮时,会启动一个单独的线程去扫描文件夹,然后将找到的PDF文件名发送给UI更新。另一个线程负责将这些文件名写入Excel。
请注意,你需要安装`PyPDF2`, `pandas`, 和 `openpyxl` 库,可以通过命令行或pip安装它们。同时,为了保持简洁,这里假设`excel_writer_func`已经存在,你可以根据实际需求自定义这个方法。
阅读全文