You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行tkinter PDF转音频代码报bad window path name错误求助

错误根因
  • 核心问题是ebook函数内创建的两个按钮没有指定父组件:你创建brows_pdf、audio_button按钮时没有传master参数,tkinter默认会把组件绑定到程序第一个创建的Tk实例也就是主窗口root上,但你后续调用canvas1.create_window要把这两个属于root的组件挂载到属于子窗口book的画布上,跨Tk实例的组件操作不被tkinter支持,就会触发窗口路径无效的错误。
  • 额外不规范用法:tkinter程序禁止同时创建多个Tk实例,每个Tk对应独立的tcl解释器,资源互不互通,新开子窗口应该用Toplevel类实现,也不需要给子窗口单独加mainloop。
修复步骤
  1. 把ebook函数里book = tk.Tk()替换为book = tk.Toplevel(),删除函数末尾的book.mainloop()
  2. 给两个按钮的创建代码加上master=book参数,指定父组件为子窗口book
修改后的核心代码段
def ebook():
    import tkinter as tk
    from tkinter import filedialog
    from tkinter import messagebox
    from gtts import gTTS
    import pdfplumber

    # 用Toplevel创建子窗口,不要用第二个Tk
    book = tk.Toplevel()
    book.minsize(width=150, height=200)
    book.maxsize(width=300, height=420)

    canvas1 = tk.Canvas(book, width=300, height=420, bg='azure3', relief='raised')
    canvas1.grid()

    label1 = tk.Label(book, text="PDF Audio Store", bg='azure3')
    label1.config(font=('helvetica', 16))
    canvas1.create_window(150, 20, window=label1)

    final = ""

    def get_pdf():
        global final
        global pdf_checker
        try:
            import_file_path = filedialog.askopenfilename()
            if (str(import_file_path).endswith(".pdf")):
                pdf = pdfplumber.open(import_file_path)
                pdf_checker = pdf
                n = len(pdf.pages)
                for page in range(n):
                    data = pdf.pages[page].extract_text()
                    final = final + "\n" + data
                messagebox.showinfo("Information", "PDF is imported")
            else:
                raise Exception("Provide .pdf file only")
        except Exception as e:
            messagebox.showerror("Error", "{}".format(e))
        else:
            print("Continue to conversion")

    # 给按钮指定master为book
    brows_pdf = tk.Button(master=book, text="PDF entry", command=get_pdf, bg='royalblue', fg="white", font=('helvetica', 12, 'bold'),
                          border=0,
                          activebackground="green")
    canvas1.create_window(150, 60, window=brows_pdf)

    def convert_audio():
        global final
        global pdf_checker
        try:
            print("File Information")
            print(pdf_checker)
            export_file_path = filedialog.asksaveasfilename(defaultextension=".mp3")
            final_file = gTTS(text=final, lang="en")
            final_file.save(export_file_path)
            messagebox.showinfo("Information", "Audio file generated")
        except NameError:
            messagebox.showwarning("Warning", "Import PDF first")

    # 给按钮指定master为book
    audio_button = tk.Button(master=book, text="Convert to Audio", command=convert_audio, bg='royalblue', fg="white",
                             font=('helvetica', 12, 'bold'),
                             border=0,
                             activebackground="green")
    canvas1.create_window(150, 100, window=audio_button)

内容的提问来源于stack exchange,提问作者user16806547

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:06:02