如何在多页面tkinter应用中根据用户输入修改Label内容
报错原因
你遇到的NameError: name 'nameentry' is not defined是变量作用域问题:
nameentry是StartPage类__init__方法内的局部变量,仅在该方法的运行上下文中有效,StudyFriendO类的getname方法无法跨作用域访问到这个变量- 你没有把
nameentry绑定为StartPage的实例属性,就算拿到StartPage的实例也无法直接调取输入框内容
修复步骤
把
StartPage类里的nameentry从局部变量改为实例属性
修改StartPage__init__方法里的输入框定义代码:# 原来的代码 # nameentry = tk.Entry(self, width=20, bg="white") # nameentry.place(relx=0.5, rely=0.68, anchor='center') # 修改为 self.nameentry = tk.Entry(self, width=20, bg="white") self.nameentry.place(relx=0.5, rely=0.68, anchor='center')修改
StudyFriendO类的getname方法,先取StartPage实例再调取输入值def getname(self, cont): start_page: StartPage = self.frames[cont] home_page: HomePage = self.frames[HomePage] home_page.name_label.configure(text=start_page.nameentry.get() + "'s Planner ")(可选体验优化)你当前的提交逻辑是拆分的,需要分别点日期提交、姓名提交、进入主页三个按钮,可直接把三个逻辑合并到同一个Enter按钮触发:
修改StartPage里的Enter按钮定义:button1 = ttk.Button(self, text="Enter", command=lambda: [controller.set_date(StartPage), controller.getname(StartPage), controller.show_frame(HomePage)])这样用户填完信息只需要点一次Enter,就能同时完成日期设置、个性化标题设置、跳转主页三个操作。
内容的提问来源于stack exchange,提问作者Minbutt
相关产品推荐
相关产品推荐

