给自己编写一个免费简单的设计pdf 和word文件互相转换小程序,使用pyqt5 做ui设计。
代码如下:
# 导入必要的库和模块
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication, QFileDialog
from pdf2docx import Converter
from docx2pdf import convert
import re
import sys
# 设置应用程序的显示属性,启用高DPI缩放
QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
# 定义主窗口类,继承自QMainWindow
class Ui_MainWindow(QMainWindow):
def __init__(self):
super(Ui_MainWindow, self).__init__() # 调用父类的构造函数
self.setupUi(self) # 初始化窗体设置
# 设置UI界面的方法
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow") # 设置窗口对象名称
MainWindow.resize(463, 107) # 设置窗口大小
MainWindow.setStyleSheet("") # 设置窗口样式表
MainWindow.setWindowFlags(QtCore.Qt.MSWindowsFixedSizeDialogHint) # 只显示最小化和关闭按钮
self.centralwidget = QtWidgets.QWidget(MainWindow) # 创建中央部件
self.centralwidget.setObjectName("centralwidget") # 设置中央部件对象名称
self.btopenFile = QtWidgets.QPushButton(self.centralwidget) # 创建打开文件按钮
self.btopenFile.setGeometry(QtCore.QRect(290, 20, 75, 23)) # 设置按钮位置和大小
self.btopenFile.setObjectName("btopenFile") # 设置按钮对象名称
self.edit_openFilePwd = QtWidgets.QLineEdit(self.centralwidget) # 创建输入框用于显示打开的文件路径
self.edit_openFilePwd.setGeometry(QtCore.QRect(110, 20, 171, 20)) # 设置输入框位置和大小
self.edit_openFilePwd.setObjectName("edit_openFilePwd") # 设置输入框对象名称
self.btsaveFile = QtWidgets.QPushButton(self.centralwidget) # 创建保存文件按钮
self.btsaveFile.setGeometry(QtCore.QRect(290, 50, 75, 23)) # 设置按钮位置和大小
self.btsaveFile.setObjectName("btsaveFile") # 设置按钮对象名称
self.fileconvert = QtWidgets.QPushButton(self.centralwidget) # 创建转换文件按钮
self.fileconvert.setGeometry(QtCore.QRect(380, 30, 61, 51)) # 设置按钮位置和大小
self.fileconvert.setObjectName("fileconvert") # 设置按钮对象名称
self.comboBox = QtWidgets.QComboBox(self.centralwidget) # 创建下拉选择框
self.comboBox.setGeometry(QtCore.QRect(10, 30, 91, 31)) # 设置下拉选择框位置和大小
self.comboBox.setObjectName("comboBox") # 设置下拉选择框对象名称
self.comboBox.addItem("") # 在下拉选择框中添加空选项
self.comboBox.addItem("") # 在下拉选择框中添加空选项
MainWindow.setCentralWidget(self.centralwidget) # 设置中央部件为主窗口的中心部件
self.statusbar = QtWidgets.QStatusBar(MainWindow) # 创建状态栏
self.statusbar.setObjectName("statusbar") # 设置状态栏对象名称
MainWindow.setStatusBar(self.statusbar) # 将状态栏设置为主窗口的状态栏
# 连接按钮点击事件到相应的槽函数
self.btopenFile.clicked.connect(self.openfile)
self.btsaveFile.clicked.connect(self.savefile)
self.fileconvert.clicked.connect(self.file_convert)
# 重新翻译UI界面文本
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow) # 自动连接信号和槽
# 打开文件的方法
def openfile(self):
if self.comboBox.currentText() == 'Pdf 转 Word': # 如果选择的是PDF转Word
options = QFileDialog.Options() # 创建文件对话框选项
filename = QFileDialog.getOpenFileName(self, "QFileDialog.getOpenFileName()", "", "PDF Files (*.pdf);;All Files (*)", options=options) # 打开文件对话框获取PDF文件路径
if filename:
self.openfilepath = filename[0] # 获取选中的文件路径
self.edit_openFilePwd.setText(self.openfilepath) # 在输入框中显示文件路径
self.wordfilepath = re.sub(r'\.pdf$', '.docx', self.openfilepath) # 根据PDF文件路径生成Word文件路径
self.edit_saveFilePwd.setText(self.wordfilepath) # 在输入框中显示Word文件路径
self.statusbar.showMessage(f'Selected file: {self.openfilepath}') # 在状态栏显示选中的文件路径
elif self.comboBox.currentText() == 'Word 转 Pdf': # 如果选择的是Word转PDF
options = QFileDialog.Options() # 创建文件对话框选项
filename = QFileDialog.getOpenFileName(self, "QFileDialog.getOpenFileName()", "", "WORD Files (*.docx);;All Files (*)", options=options) # 打开文件对话框获取Word文件路径
if filename:
self.openfilepath = filename[0] # 获取选中的文件路径
self.edit_openFilePwd.setText(self.openfilepath) # 在输入框中显示文件路径
self.wordfilepath = re.sub(r'\.docx$', '.pdf', self.openfilepath) # 根据Word文件路径生成PDF文件路径
self.edit_saveFilePwd.setText(self.wordfilepath) # 在输入框中显示PDF文件路径
self.statusbar.showMessage(f'Selected file: {self.openfilepath}') # 在状态栏显示选中的文件路径
# 保存文件的方法
def savefile(self):
if self.comboBox.currentText() == 'Pdf 转 Word': # 如果选择的是PDF转Word
options = QFileDialog.Options() # 创建文件对话框选项
filename = QFileDialog.getSaveFileName(self, "QFileDialog.getOpenFileName()", "", "WORD Files (*.docx);;All Files (*)", options=options) # 打开文件对话框获取保存路径
if filename:
self.savefilepath = filename[0] # 获取保存路径
self.edit_saveFilePwd.setText(self.savefilepath) # 在输入框中显示保存路径
self.statusbar.showMessage(f'save file: {self.savefilepath}') # 在状态栏显示保存路径
elif self.comboBox.currentText() == 'Word 转 Pdf': # 如果选择的是Word转PDF
options = QFileDialog.Options() # 创建文件对话框选项
filename = QFileDialog.getSaveFileName(self, "QFileDialog.getOpenFileName()", "", "PDF Files (*.pdf);;All Files (*)", options=options) # 打开文件对话框获取保存路径
if filename:
self.savefilepath = filename[0] # 获取保存路径
self.edit_saveFilePwd.setText(self.savefilepath) # 在输入框中显示保存路径
self.statusbar.showMessage(f'save file: {self.savefilepath}') # 在状态栏显示保存路径
# 文件转换的方法
def file_convert(self):
if self.comboBox.currentText() == 'Pdf 转 Word': # 如果选择的是PDF转Word
try:
cv = Converter(self.openfilepath) # 创建PDF转换器对象
cv.convert(self.wordfilepath, start=0, end=None) # 执行转换操作
cv.close() # 关闭转换器对象
self.statusbar.showMessage(f'{self.wordfilepath} 转换成功!') # 在状态栏显示转换成功信息
except Exception as e:
self.statusbar.showMessage(f'Error during conversion: {str(e)}') # 如果发生错误,在状态栏显示错误信息
elif self.comboBox.currentText() == 'Word 转 Pdf': # 如果选择的是Word转PDF
_wordFile = self.edit_openFilePwd.text() # 获取Word文件路径
_pdfFile = self.edit_saveFilePwd.text() # 获取PDF文件路径
convert(_wordFile, _pdfFile) # 执行转换操作
self.statusbar.showMessage(f'{_pdfFile} 转换成功!') # 在状态栏显示转换成功信息
# 重新翻译UI界面文本的方法
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate # 获取翻译函数
MainWindow.setWindowTitle(_translate("MainWindow", "file_convert")) # 设置窗口标题
self.btopenFile.setText(_translate("MainWindow", "打开文件")) # 设置打开文件按钮文本
self.btsaveFile.setText(_translate("MainWindow", "保存路径")) # 设置保存路径按钮文本
self.fileconvert.setText(_translate("MainWindow", "开始转换")) # 设置开始转换按钮文本
self.comboBox.setItemText(0, _translate("MainWindow", "Pdf 转 Word")) # 设置下拉选择框第一项文本
self.comboBox.setItemText(1, _translate("MainWindow", "Word 转 Pdf")) # 设置下拉选择框第二项文本
if __name__ == "__main__":
app = QApplication(sys.argv) # 创建应用程序对象
window = Ui_MainWindow() # 创建主窗口对象
window.show() # 显示主窗口
sys.exit(app.exec_()) # 进入应用程序的主循环并等待退出