最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Python和Tkinter實(shí)現(xiàn)一個(gè)PPT文本提取工具

 更新時(shí)間:2025年11月28日 09:39:43   作者:溫輕舟  
這篇文章主要介紹了基于tkinter和python-pptx庫(kù)的PPT文本提取工具,支持將提取的文本保存為TXT或Word文檔,并提供了進(jìn)度顯示和錯(cuò)誤處理功能,需要的朋友可以參考下

一:效果展示:

本項(xiàng)目是基于 tkinter 圖形界面的 PPT 文本提取工具,主要功能是從 PPT文件中提取所有文本內(nèi)容,并支持將提取的文本保存為 .txt 格式Word 文檔(.docx)

二:功能描述:

1. 核心功能:

(1)PPT 文件選擇

  • 用戶可以通過(guò)界面瀏覽并選擇本地的PPT( .pptx )文件
  • 默認(rèn)將保存路徑設(shè)置為與 PPT 文件同目錄下的 提取的文本 文件夾(自動(dòng)創(chuàng)建)

(2)保存路徑與格式設(shè)置

用戶可自定義保存路徑(通過(guò)文件夾選擇)

支持兩種保存格式:

TXT 文件:純文本格式,每段文本占一行

Word 文檔:通過(guò) python-docx 庫(kù)生成 .docx 文件,保留段落結(jié)構(gòu)

(3)文本提取與進(jìn)度顯示

  • 遍歷 PPT 的每一頁(yè)幻燈片,提取所有 PPT 中的文本框內(nèi)容
  • 實(shí)時(shí)更新進(jìn)度條,顯示當(dāng)前處理的幻燈片進(jìn)度
  • 若 PPT 中無(wú)文本,提示用戶 “ 未提取到任何文本 ”

(4)錯(cuò)誤處理與反饋

  • 捕獲異常(如文件損壞、權(quán)限問(wèn)題等),通過(guò)彈窗顯示錯(cuò)誤信息
  • 成功提取后,彈出提示框顯示保存路徑

2. 技術(shù)實(shí)現(xiàn):

(1)依賴庫(kù)

  • tkinter:構(gòu)建圖形界面(文件對(duì)話框、按鈕、進(jìn)度條等)
  • python-pptx:讀取PPT(.pptx) 文件并提取文本
  • python-docx:生成 Word 文檔(僅在保存為 .docx 時(shí)使用)
  • os:處理文件路徑(如創(chuàng)建目錄,拼接路徑)

(2)代碼結(jié)構(gòu)

  • PPTTextExtractorApp 類封裝所有功能,通過(guò) __init__ 初始化界面,create_widgets 創(chuàng)建控件
  • browse_ppt():選擇 PPT 文件
  • browse_save_path():選擇保存目錄
  • extract_text():核心邏輯(提取文本→保存文件→更新進(jìn)度)

三:完整代碼:

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")  # 默認(rèn)保存為 TXT

        # 創(chuàng)建 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)

        # 進(jìn)度條
        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)
            # 默認(rèn)保存路徑與 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("警告", "請(qǐng)選擇 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("錯(cuò)誤", f"發(fā)生錯(cuò)誤:\n{str(e)}")
            self.progress["value"] = 0

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

四:代碼分析

1. 導(dǎo)入模塊

# os: 用于操作系統(tǒng)相關(guān)功能,如路徑處理
import os 

# tkinter: 用于創(chuàng)建圖形用戶界面(GUI)
import tkinter as tk

"""
filedialog: 用于文件選擇對(duì)話框
messagebox: 顯示消息對(duì)話框
ttk: 提供進(jìn)度條等小部件
"""
from tkinter import filedialog, messagebox, ttk

# pptx.Presentation: 用于讀取PPT文件
from pptx import Presentation

# docx: 用于創(chuàng)建Word文檔
import docx

2. 主應(yīng)用類定義

# 定義主應(yīng)用類 PPTTextExtractorApp
class PPTTextExtractorApp:
    def __init__(self, root):
        # 初始化方法設(shè)置窗口標(biāo)題和大小(600x400像素)
        self.root = root
        self.root.title("PPT 文本提取工具")
        self.root.geometry("600x400")

3. 初始化變量

# 初始化變量,創(chuàng)建三個(gè)Tkinter變量用于存儲(chǔ)
"""
ppt_path: 選擇的PPT文件路徑
save_path: 保存結(jié)果的路徑
file_format: 輸出格式(默認(rèn)為txt)
"""
self.ppt_path = tk.StringVar()
self.save_path = tk.StringVar()
self.file_format = tk.StringVar(value="txt")  

4. 創(chuàng)建UI界面

def create_widgets(self):
    # PPT 文件選擇(包含標(biāo)簽、輸入框和瀏覽按鈕)
    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)

    # 提取按鈕(綠色按鈕,點(diǎn)擊觸發(fā)提取操作)
    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)

    # 進(jìn)度條
    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)
        # 默認(rèn)保存路徑與 PPT 文件同目錄
        default_save_path = os.path.join(os.path.dirname(filepath), "提取的文本")
        self.save_path.set(default_save_path)

以上就是基于Python和tkinter實(shí)現(xiàn)PPT文本提取工具的詳細(xì)內(nèi)容,更多關(guān)于Python tkinter實(shí)現(xiàn)PPT文本提取的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實(shí)現(xiàn)快速多線程ping的方法

    Python實(shí)現(xiàn)快速多線程ping的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)快速多線程ping的方法,實(shí)例分析了Python多線程及ICMP數(shù)據(jù)包的發(fā)送技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • python datetime 和時(shí)間戳互相轉(zhuǎn)換問(wèn)題

    python datetime 和時(shí)間戳互相轉(zhuǎn)換問(wèn)題

    time和datetime都是Python中的內(nèi)置模塊(不需要安裝,直接可以使用),都可以對(duì)時(shí)間進(jìn)行獲取,對(duì)時(shí)間格式進(jìn)行轉(zhuǎn)換,如時(shí)間戳和時(shí)間字符串的相互轉(zhuǎn)換,本文先給大家介紹python datetime 和時(shí)間戳互轉(zhuǎn)問(wèn)題,感興趣的朋友一起看看吧
    2022-11-11
  • python使用xmlrpclib模塊實(shí)現(xiàn)對(duì)百度google的ping功能

    python使用xmlrpclib模塊實(shí)現(xiàn)對(duì)百度google的ping功能

    這篇文章主要介紹了python使用xmlrpclib模塊實(shí)現(xiàn)對(duì)百度google的ping功能,實(shí)例分析了xmlrpclib模塊的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • python實(shí)現(xiàn)文本去重且不打亂原本順序

    python實(shí)現(xiàn)文本去重且不打亂原本順序

    這篇文章主要介紹了python實(shí)現(xiàn)文本去重且不打亂原本順序,需要的朋友可以參考下
    2016-01-01
  • Python如何處理大數(shù)據(jù)?3個(gè)技巧效率提升攻略(推薦)

    Python如何處理大數(shù)據(jù)?3個(gè)技巧效率提升攻略(推薦)

    這篇文章主要介紹了Python如何處理大數(shù)據(jù)?3個(gè)技巧效率提升攻略,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Flask框架學(xué)習(xí)筆記之路由和反向路由詳解【圖文與實(shí)例】

    Flask框架學(xué)習(xí)筆記之路由和反向路由詳解【圖文與實(shí)例】

    這篇文章主要介紹了Flask框架學(xué)習(xí)筆記之路由和反向路由,結(jié)合圖文與實(shí)例形式詳細(xì)分析了flask框架中路由與反向路由相關(guān)概念、原理、用法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-08-08
  • 聊聊pytorch中Optimizer與optimizer.step()的用法

    聊聊pytorch中Optimizer與optimizer.step()的用法

    這篇文章主要介紹了pytorch中Optimizer與optimizer.step()的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python利用Streamlit構(gòu)建一個(gè)簡(jiǎn)單的照片墻應(yīng)用

    Python利用Streamlit構(gòu)建一個(gè)簡(jiǎn)單的照片墻應(yīng)用

    在現(xiàn)代 web 開(kāi)發(fā)中,快速構(gòu)建交互式應(yīng)用是一項(xiàng)重要的技能,Streamlit 是一個(gè)強(qiáng)大的 Python 庫(kù),允許開(kāi)發(fā)者以最小的代碼量創(chuàng)建美觀且功能豐富的 web 應(yīng)用,今天,我們將通過(guò)分析一段簡(jiǎn)單的 Streamlit 代碼,展示如何構(gòu)建一個(gè)照片墻應(yīng)用,需要的朋友可以參考下
    2025-04-04
  • python實(shí)現(xiàn)電腦操控安卓手機(jī)

    python實(shí)現(xiàn)電腦操控安卓手機(jī)

    網(wǎng)上雖然有很多教程,但是隨著版本的更新總有各種各樣的坑,本文以親身踏坑經(jīng)歷介紹了電腦使用python操控安卓手機(jī),從安裝到使用方法,感興趣的可以了解一下
    2021-05-05
  • pytorch中的dataset用法詳解

    pytorch中的dataset用法詳解

    這篇文章主要介紹了pytorch的dataset用法詳解,當(dāng)我們繼承了一個(gè)?Dataset類之后,我們需要重寫(xiě)?len?方法,該方法提供了dataset的大小;?getitem?方法,?該方法支持從?0?到?len(self)的索引,下面來(lái)看看附有代碼的講解吧,希望對(duì)你的學(xué)習(xí)或者工作有所幫助
    2022-01-01

最新評(píng)論

翼城县| 宝鸡市| 遵义市| 赤壁市| 鲁山县| 大英县| 阿拉善盟| 茶陵县| 东源县| 德惠市| 和顺县| 亚东县| 方山县| 永善县| 措美县| 武山县| 泗水县| 桦甸市| 思茅市| 丰顺县| 盈江县| 福鼎市| 望奎县| 汨罗市| 颍上县| 张家口市| 隆昌县| 新蔡县| 固始县| 凤冈县| 遂宁市| 石柱| 康马县| 乐山市| 慈溪市| 友谊县| 灌云县| 定远县| 芷江| 颍上县| 区。|