一、效果样式
二、核心点
1. 使用pdf2docx
完成PDF
转换Word
安装pdf2docx可能会报错,安装完成引入from pdf2docx import Converter
运行也可能报错,可以根据报错提示看缺少那些库,先卸载pip uninstall xxx
,使用pip install python-docx -i https://pypi.douban.com/simple/
进行指定下载路径安装。
2. text
组件禁止键盘鼠标点击编辑
使用bind
对<Key><Button-1>
进行事件绑定
tipText.bind("<Key>",lambda event:"break")
tipText.bind("<Button-1>",lambda event:"break")
3. tkinter页面实时输出显示,并且定位到最下面
#更新text组件
tipText.update()
#实时定位到下面
tipText.see(END)
4. 打开文件夹路径
使用filedialog
from tkinter import filedialog
# 打开文件夹选择对话框
folder_path = filedialog.askdirectory()
三、完整代码
import os
from pdf2docx import Converter
from tkinter import *
import time
from tkinter import filedialog
# 批量转换word
def pdf_docx():
# 遍历所有文件
file_path = folderInput.get("1.0", "end-1c")
i = 0
for file in os.listdir(file_path):
# 获取文件后缀
suff_name = os.path.splitext(file)[1]
# 过滤非pdf格式文件
if suff_name != '.pdf':
continue
# 获取文件名称
i+=1
file_name = os.path.splitext(file)[0]
# pdf文件名称
pdf_name = file_path + '\\' + file
# 要转换的docx文件名称
docx_name = file_path + '\\' + file_name + '.docx'
# 加载pdf文档
tipText.insert(INSERT,"正在转换文件:\n")
tipText.insert(INSERT,f"{file_name}.pdf\n")
time.sleep(0.1)
tipText.insert(END,"正在转换,请稍等... \n")
tipText.see(END)
folderInput.update()
cv = Converter(pdf_name)
cv.convert(docx_name)
cv.close()
tipText.insert(END,"转换完成! \n \n")
tipText.see(END)
tipText.insert(END,f"一共转换了{i}个PDF文件,请返回文件夹目录进行查看转换的Word文件!")
# 选择文件夹的逻辑
def choose_folder():
# 打开文件夹选择对话框
folder_path = filedialog.askdirectory()
# 更新标签文本
# print(folder_path)
folderInput.insert(END,folder_path)
# GUI页面
root = Tk()
root.title("PDF转Word工具")
root.geometry("600x400")
root.resizable(False, False)
# 布局框架
fr = Frame(root).pack(anchor = 'nw')
folderInput = Text(fr,width=30,height=1, font=('Arial', 14))
folderInput.place(x=40,y=20)
folderInput.bind("<Key>",lambda event:"break")
folderInput.bind("<Button-1>",lambda event:"break")
folder = Button(fr,text='选择文件夹', command=choose_folder).place(x=400,y=18)
conver = Button(fr,text='批量转换', command=pdf_docx).place(x=500,y=18)
tipText = Text(fr,width=74,height=22,padx=2, pady=2)
tipText.place(x=40,y=80)
tipText.bind("<Key>",lambda event:"break")
tipText.bind("<Button-1>",lambda event:"break")
tipText.insert(INSERT,'欢迎使用PDF转换Word工具! \n\n')
mainloop()
**使用pyinstaller打包时建议使用 pyinstaller -w .\pdftoword.py
命令,这样打开运行程序不显示终端窗口,更加友好