当前位置: 代码网 > it编程>前端脚本>Python > 基于Python和Tkinter实现一个PPT文本提取工具

基于Python和Tkinter实现一个PPT文本提取工具

2025年11月28日 Python 我要评论
一:效果展示:本项目是基于 tkinter 图形界面的 ppt 文本提取工具,主要功能是从 ppt文件中提取所有文本内容,并支持将提取的文本保存为 .txt 格式 或 word 文档(.docx)二:

一:效果展示:

本项目是基于 tkinter 图形界面的 ppt 文本提取工具,主要功能是从 ppt文件中提取所有文本内容,并支持将提取的文本保存为 .txt 格式word 文档(.docx)

二:功能描述:

1. 核心功能:

(1)ppt 文件选择

  • 用户可以通过界面浏览并选择本地的ppt( .pptx )文件
  • 默认将保存路径设置为与 ppt 文件同目录下的 提取的文本 文件夹(自动创建)

(2)保存路径与格式设置

用户可自定义保存路径(通过文件夹选择)

支持两种保存格式:

txt 文件:纯文本格式,每段文本占一行

word 文档:通过 python-docx 库生成 .docx 文件,保留段落结构

(3)文本提取与进度显示

  • 遍历 ppt 的每一页幻灯片,提取所有 ppt 中的文本框内容
  • 实时更新进度条,显示当前处理的幻灯片进度
  • 若 ppt 中无文本,提示用户 “ 未提取到任何文本 ”

(4)错误处理与反馈

  • 捕获异常(如文件损坏、权限问题等),通过弹窗显示错误信息
  • 成功提取后,弹出提示框显示保存路径

2. 技术实现:

(1)依赖库

  • tkinter:构建图形界面(文件对话框、按钮、进度条等)
  • python-pptx:读取ppt(.pptx) 文件并提取文本
  • python-docx:生成 word 文档(仅在保存为 .docx 时使用)
  • os:处理文件路径(如创建目录,拼接路径)

(2)代码结构

  • ppttextextractorapp 类封装所有功能,通过 __init__ 初始化界面,create_widgets 创建控件
  • browse_ppt():选择 ppt 文件
  • browse_save_path():选择保存目录
  • extract_text():核心逻辑(提取文本→保存文件→更新进度)

三:完整代码:

import os
import tkinter as tk
from tkinter import filedialog, messagebox, ttk
from pptx import presentation
import docx

class ppttextextractorapp:
    def __init__(self, root):
        self.root = root
        self.root.title("ppt 文本提取工具")
        self.root.geometry("600x400")

        # 初始化变量
        self.ppt_path = tk.stringvar()
        self.save_path = tk.stringvar()
        self.file_format = tk.stringvar(value="txt")  # 默认保存为 txt

        # 创建 ui
        self.create_widgets()

    def create_widgets(self):
        # ppt 文件选择
        tk.label(self.root, text="选择 ppt 文件:").pack(pady=(10, 0), anchor="w", padx=10)
        ppt_frame = tk.frame(self.root)
        ppt_frame.pack(fill="x", padx=10, pady=5)
        tk.entry(ppt_frame, textvariable=self.ppt_path, width=50).pack(side="left", expand=true, fill="x")
        tk.button(ppt_frame, text="浏览...", command=self.browse_ppt).pack(side="right", padx=5)

        # 保存路径选择
        tk.label(self.root, text="保存路径:").pack(pady=(10, 0), anchor="w", padx=10)
        save_frame = tk.frame(self.root)
        save_frame.pack(fill="x", padx=10, pady=5)
        tk.entry(save_frame, textvariable=self.save_path, width=50).pack(side="left", expand=true, fill="x")
        tk.button(save_frame, text="浏览...", command=self.browse_save_path).pack(side="right", padx=5)

        # 文件格式选择
        tk.label(self.root, text="保存格式:").pack(pady=(10, 0), anchor="w", padx=10)
        format_frame = tk.frame(self.root)
        format_frame.pack(fill="x", padx=10, pady=5)
        tk.radiobutton(format_frame, text="txt 文件", variable=self.file_format, value="txt").pack(side="left", padx=10)
        tk.radiobutton(format_frame, text="word 文档", variable=self.file_format, value="docx").pack(side="left", padx=10)

        # 提取按钮
        tk.button(
            self.root,
            text="提取文本并保存",
            command=self.extract_text,
            bg="#4caf50",
            fg="white",
            height=2,
            font=("arial", 10, "bold")
        ).pack(pady=20, fill="x", padx=50)

        # 进度条
        self.progress = ttk.progressbar(self.root, orient="horizontal", length=400, mode="determinate")
        self.progress.pack(pady=10)

    def browse_ppt(self):
        filepath = filedialog.askopenfilename(
            title="选择 ppt 文件",
            filetypes=[("powerpoint 文件", "*.pptx"), ("所有文件", "*.*")]
        )
        if filepath:
            self.ppt_path.set(filepath)
            # 默认保存路径与 ppt 文件同目录
            default_save_path = os.path.join(os.path.dirname(filepath), "提取的文本")
            self.save_path.set(default_save_path)

    def browse_save_path(self):
        dirpath = filedialog.askdirectory(title="选择保存文件夹")
        if dirpath:
            self.save_path.set(dirpath)

    def extract_text(self):
        ppt_path = self.ppt_path.get()
        save_path = self.save_path.get()
        file_format = self.file_format.get()

        if not ppt_path or not save_path:
            messagebox.showwarning("警告", "请选择 ppt 文件和保存路径!")
            return

        try:
            # 提取文本
            prs = presentation(ppt_path)
            data = []
            total_slides = len(prs.slides)
            self.progress["maximum"] = total_slides
            self.progress["value"] = 0
            self.root.update()

            for slide_idx, slide in enumerate(prs.slides, 1):
                for shape in slide.shapes:
                    if shape.has_text_frame:
                        for paragraph in shape.text_frame.paragraphs:
                            data.append(paragraph.text)
                self.progress["value"] = slide_idx
                self.root.update()

            if not data:
                messagebox.showinfo("提示", "未提取到任何文本!")
                return

            # 确保保存路径存在
            os.makedirs(save_path, exist_ok=true)

            # 生成文件名
            ppt_name = os.path.splitext(os.path.basename(ppt_path))[0]
            output_filename = f"{ppt_name}_提取的文本.{file_format}"
            output_path = os.path.join(save_path, output_filename)

            # 保存文件
            if file_format == "txt":
                with open(output_path, "w", encoding="utf-8") as f:
                    f.write("\n".join(data))
            elif file_format == "docx":
                doc = docx.document()
                for text in data:
                    doc.add_paragraph(text)
                doc.save(output_path)

            messagebox.showinfo("成功", f"文本已成功提取并保存至:\n{output_path}")
            self.progress["value"] = 0

        except exception as e:
            messagebox.showerror("错误", f"发生错误:\n{str(e)}")
            self.progress["value"] = 0

if __name__ == "__main__":
    root = tk.tk()
    app = ppttextextractorapp(root)
    root.mainloop()

四:代码分析

1. 导入模块

# os: 用于操作系统相关功能,如路径处理
import os 

# tkinter: 用于创建图形用户界面(gui)
import tkinter as tk

"""
filedialog: 用于文件选择对话框
messagebox: 显示消息对话框
ttk: 提供进度条等小部件
"""
from tkinter import filedialog, messagebox, ttk

# pptx.presentation: 用于读取ppt文件
from pptx import presentation

# docx: 用于创建word文档
import docx

2. 主应用类定义

# 定义主应用类 ppttextextractorapp
class ppttextextractorapp:
    def __init__(self, root):
        # 初始化方法设置窗口标题和大小(600x400像素)
        self.root = root
        self.root.title("ppt 文本提取工具")
        self.root.geometry("600x400")

3. 初始化变量

# 初始化变量,创建三个tkinter变量用于存储
"""
ppt_path: 选择的ppt文件路径
save_path: 保存结果的路径
file_format: 输出格式(默认为txt)
"""
self.ppt_path = tk.stringvar()
self.save_path = tk.stringvar()
self.file_format = tk.stringvar(value="txt")  

4. 创建ui界面

def create_widgets(self):
    # ppt 文件选择(包含标签、输入框和浏览按钮)
    tk.label(self.root, text="选择 ppt 文件:").pack(pady=(10, 0), anchor="w", padx=10)
    ppt_frame = tk.frame(self.root)
    ppt_frame.pack(fill="x", padx=10, pady=5)
    tk.entry(ppt_frame, textvariable=self.ppt_path, width=50).pack(side="left", expand=true, fill="x")
    tk.button(ppt_frame, text="浏览...", command=self.browse_ppt).pack(side="right", padx=5)

    # 保存路径选择
    tk.label(self.root, text="保存路径:").pack(pady=(10, 0), anchor="w", padx=10)
    save_frame = tk.frame(self.root)
    save_frame.pack(fill="x", padx=10, pady=5)
    tk.entry(save_frame, textvariable=self.save_path, width=50).pack(side="left", expand=true, fill="x")
    tk.button(save_frame, text="浏览...", command=self.browse_save_path).pack(side="right", padx=5)

    # 文件格式选择(单选按钮组,选择 txt 或 word 格式)
    tk.label(self.root, text="保存格式:").pack(pady=(10, 0), anchor="w", padx=10)
    format_frame = tk.frame(self.root)
    format_frame.pack(fill="x", padx=10, pady=5)
    tk.radiobutton(format_frame, text="txt 文件", variable=self.file_format, value="txt").pack(side="left", padx=10)
    tk.radiobutton(format_frame, text="word 文档", variable=self.file_format, value="docx").pack(side="left", padx=10)

    # 提取按钮(绿色按钮,点击触发提取操作)
    tk.button(
        self.root,
        text="提取文本并保存",
        command=self.extract_text,
        bg="#4caf50",
        fg="white",
        height=2,
        font=("arial", 10, "bold")
    ).pack(pady=20, fill="x", padx=50)

    # 进度条
    self.progress = ttk.progressbar(self.root, orient="horizontal", length=400, mode="determinate")
    self.progress.pack(pady=10)

5. 浏览ppt文件

def browse_ppt(self):
    filepath = filedialog.askopenfilename(
        title="选择 ppt 文件",
        # 限制为.pptx文件
        filetypes=[("powerpoint 文件", "*.pptx"), ("所有文件", "*.*")]
    )
    if filepath:
        self.ppt_path.set(filepath)
        # 默认保存路径与 ppt 文件同目录
        default_save_path = os.path.join(os.path.dirname(filepath), "提取的文本")
        self.save_path.set(default_save_path)

以上就是基于python和tkinter实现ppt文本提取工具的详细内容,更多关于python tkinter实现ppt文本提取的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com