python - _tkinter.TclError:错误的窗口路径名“.!button2”
问题描述
我正在尝试运行此代码,但它给出了 "_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")
它在 this() 区域特别是 create_window 中给出错误。错误图像
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
用于第二个窗口,并确保按钮是第二个窗口和/或画布的后代。
推荐阅读
- autodesk-forge - 如何创建公共 Forge 设计自动化活动和包?
- c# - 如何以编程方式格式化 visio 形状(颜色、大小、字体)的文本?
- flutter - 如何修复错误:没有为类“BuildContext”定义方法“ancestorWidgetOfExactType”
- javascript - 如何过滤资源列表中的项目
- postgresql - 使用有限的 pg_hba.conf 访问访问 postgres 服务器
- django - 如何在 django 模型中使用附加字段设置多个值?
- c# - 如何使类中的对象比我用来创建该对象的类更易于访问?
- amazon-web-services - aws-shell 在 AWS Lightsail 上的 Ubuntu 20 中不起作用
- netsuite - 将响应存储回 NetSuite 的最佳方式?
- node.js - NodeJS Postgres NestTables 等效