Python 在tkinter应用程序中调用self controller.method()时获取KeyError

Python 在tkinter应用程序中调用self controller.method()时获取KeyError,python,tkinter,Python,Tkinter,我已经建立了一个多页面的tkinter应用程序。应用程序的结构使主GUI存储在一个.py文件中,其他页面存储在主应用程序内的dict中。主应用程序在每个页面中被引用为self.controller 当我尝试从控制器使用一种方法时,有时会产生一个键错误,有时不会,而且我一辈子都不知道为什么 我已经根据社区提供的答案重写了这组页面,每次我都修复了一个问题,但仍然没有解决这个问题,我正在尝试解决页面之间传递信息的问题 下面的代码是我的主要应用程序,稍后我会将代码变黑 将tkinter作为tk导入 从首

我已经建立了一个多页面的tkinter应用程序。应用程序的结构使主GUI存储在一个.py文件中,其他页面存储在主应用程序内的dict中。主应用程序在每个页面中被引用为self.controller

当我尝试从控制器使用一种方法时,有时会产生一个键错误,有时不会,而且我一辈子都不知道为什么

我已经根据社区提供的答案重写了这组页面,每次我都修复了一个问题,但仍然没有解决这个问题,我正在尝试解决页面之间传递信息的问题

下面的代码是我的主要应用程序,稍后我会将代码变黑

将tkinter作为tk导入 从首页导入首页 从主页导入游戏页面 类GUItk.Tk: 定义初始自我,*args,**kwargs: tk.tk.\uuuu init\uuu self,*args,**kwargs container=tk.Frameself 初始化窗口 container.packside=top,fill=both,expand=True container.grid\u rowconfigure0,权重=1 container.grid\u column配置0,重量=1 初始化每一页 self.frames={} 对于FrontPage、GamePage中的F: 页面名称=F.\u名称__ frame=Fparent=container,controller=self self.frames[页面名称]=框架 frame.gridrow=0,column=0,sticky=nsew self.show\u framefrontpage这个很好用 显示所需的帧 def显示帧自身,页面名称: frame=self.frames[页面名称] 帧 def get_pageself,page_name:我想问题其实就在这里 返回self.frames[页面名称] app=GUI app.geometry400x600 app.mainloop 现在在FrontPage上,我使用按钮按钮在游戏页面上配置标签 这就是我追踪的地方。这方面的实施是:

类FrontPagetk.Frame: 这是一个制作头版的类 它继承了tk.Frame 定义初始自身、父级、控制器: tk.Frame.\uuuu init\uuuu self,父 self.controller=控制器 self.mainframe=tk.Frameself self.mainframe.packexpand=True,fill=tk.BOTH ... gamepage=self.controller.get\u pageGamepage这就是问题所在 self.forward\u label=gamepage.name\u label 当我把这些行注释掉时,其他的一切都起作用了 按钮上的def左键: self.output\u frame.configuretext=self.name\u entry.get self.forward\u label.configuretext=self.name\u entry.get 此代码生成回溯

回溯最近一次呼叫上次:

文件/Users/kevinomalley/Desktop/python_work/rapid_rpg/app_GUI.py,第50行,在

app=GUI

文件/Users/kevinomalley/Desktop/python_-work/rapid_-rpg/app_-GUI.py,第22行,在init中

frame=Fparent=container,controller=self

文件/Users/kevinomalley/Desktop/python_-work/rapid_-rpg/front_-page.py,第106行,在init中

gamepage=self.controller.get\u pageGamePage

文件/Users/kevinomalley/Desktop/python_work/rapid_rpg/app_GUI.py,第40行,在get_页面中 返回self.frames[页面名称]

KeyError:“游戏页面”

我不知道为什么我可以调用controller.show\u frame方法而不会出现问题,但是controller.get\u page方法返回keyerror


非常感谢您的帮助。

问题是您试图在创建游戏页面之前引用该页面。这是因为您将代码放在了FrontPage中。在创建页面之前,不能引用该页面

再次感谢你的回答,布莱恩。我已经将代码移动了一点,我仍然没有得到我实际上正在寻找的功能——获取用户输入并将其传递到GamePage上的标签,但是您的回答已经修复了跟踪。