如何用文件菜单实现图形窗口文件名输入、文件读取及TopLevel报错解决
问题解决方法
核心报错原因
- 大小写拼写错误:tkinter内置的顶层窗口类名为
Toplevel,第二个字母l为小写,你代码中写为TopLevel不符合类名规范 - 缺少对应导入:你当前的导入语句没有引入
Toplevel类,无法直接调用
额外逻辑问题
你当前代码中声明的Label、Entry控件父容器指定为self(主窗口的Frame实例),即使弹出窗口创建成功,这些输入控件也不会显示在弹出窗口中,同时缺少输入内容回显到主窗口的逻辑。
修复后完整代码
from tkinter import Tk, Frame, Menu, Toplevel, StringVar from tkinter.ttk import * from tkinter import filedialog as fd class Example(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.initUI() # 主窗口用于显示文件名的变量 self.file_name_var = StringVar(value="未输入文件名") # 主窗口显示文件名的标签 Label(self, textvariable=self.file_name_var).pack(pady=20) def initUI(self): self.parent.title("Simple menu") menubar = Menu(self.parent) self.parent.config(menu=menubar) fileMenu = Menu(menubar) fileMenu.add_command(label="New", command=self.onNew) menubar.add_cascade(label="File", menu=fileMenu) self.pack() def onNew(self): print("do New") # 修正类名拼写 top = Toplevel(self.parent) top.title("输入文件名") # 控件父容器改为弹出窗口top Label(top, text='输入文件名').grid(row=0, column=0, padx=5, pady=10) e1 = Entry(top) e1.grid(row=0, column=1, padx=5, pady=10) # 新增确认逻辑,回显到主窗口 def confirm_name(): self.file_name_var.set(f"输入的文件名为:{e1.get()}") top.destroy() Button(top, text="确认", command=confirm_name).grid(row=1, column=0, columnspan=2, pady=5) def main(): root = Tk() root.geometry("300x150+300+300") app = Example(root) root.mainloop() if __name__ == '__main__': main()
关键修改说明
- 导入语句补充
Toplevel和StringVar,前者用于创建弹出窗口,后者用于实现主窗口文本的动态更新 - 修正
TopLevel为正确的Toplevel写法 - 调整弹出窗口内所有控件的父容器为新建的
top对象,确保控件显示在弹出窗口内 - 新增确认按钮和回调逻辑,点击确认后会将输入框内容同步到主窗口的显示变量中,完成回显需求
内容的提问来源于stack exchange,提问作者Renato
相关产品推荐
相关产品推荐

