【问题标题】:_tkinter.TclError: bad window path name ".!button2"_tkinter.TclError:错误的窗口路径名“.!button2”
【发布时间】:2021-10-26 16:11:17
【问题描述】:

我正在尝试运行此代码,但它给出了“_tkinter.TclError: bad window path name ".!button2" "这个错误。 但是,如果我在没有电子书功能的情况下运行相同的代码,它就可以正常工作。由于我是编码新手,任何帮助将不胜感激。

from tkinter import *

root = Tk()
root.title("Application")
root.resizable(width=False, height=False)

mylabel0= Label(root, text="        ")
mylabel0.grid(row=0, column=0)

def ebook():
    import tkinter as tk
    from tkinter import filedialog
    from tkinter import messagebox
    from gtts import gTTS
    import pdfplumber

    book = tk.Tk()
    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")

    brows_pdf = tk.Button(text="PDF entry", command=get_pdf, bg='royalblue', fg="white", font=('helvetica', 12, 'bold'),
                          border=0,
                          activebackground="green")

它在这个(??????)区域给出错误,具体来说,create_window.Error Image

    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")

    audio_button = tk.Button(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)

    book.mainloop()

button_ebook= Button(root, text="E-Book????", font=30, padx=25, pady=25, command=ebook, fg="black", bg="white", borderwidth=1)
button_ebook.grid(row=3, column=2, padx=10)




root.mainloop()

【问题讨论】:

  • 这意味着您要么销毁了按钮,要么在 Tk 的不同实例中创建了按钮。您不应创建多个 Tk 实例。
  • 那我能做些什么来运行它呢?我将它从“Tk”更改为“Toplevel”,但仍然报错。
  • 如果您提供了minimal reproducible example 会更容易判断

标签: python python-3.x tkinter


【解决方案1】:

问题的根源在于您不能在一个窗口中使用作为另一个窗口后代的按钮。

第一个问题是您正在创建Tk 的两个实例。在一个实例中创建的按钮在另一个实例中不可用。在这种情况下,您的按钮位于 Tk 的原始实例中,但您的画布位于另一个实例中。

第二个问题类似。即使替换Tk 的第二个实例,该按钮也位于根窗口中,因此不能用作第二个窗口中画布的子级。

解决方案是对第二个窗口使用Toplevel,并确保按钮是第二个窗口和/或画布的后代。

【讨论】:

    猜你喜欢
    • 2021-01-12
    • 2020-06-10
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多