아래 코드는 사용자가 해당 페이지로 이동할 수있는 일련의 페이지가 포함 된 화학 퀴즈 응용 프로그램을 보여줍니다. 어떤 이유 KeyError : <class '__main __. STAGE1'>
class STARTPAGE(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
Instructions1 = tk.Label(self, text=("You will obtain a Desired Product that is chosen randomly from a Starting Reactant."))
Instructions2 = tk.Label(self, text=("You get 3 Attempts to complete the question in which Points will be added to your score "))
Instructions3 = tk.Label(self, text=("After 3 attempts you will be moved onto next stage or question"))
Instructions4 = tk.Label(self, text=("You need to select one Reagent and 1 or 2 Conditions to complete stage"))
Instructions5 = tk.Label(self, text=("Your score will be ranked among others in your same class in a leaderboard"))
Instructions1.grid(row=0, column=0)
Instructions2.grid(row=1, column=0)
Instructions3.grid(row=2, column=0)
Instructions4.grid(row=3, column=0)
Instructions5.grid(row=4, column=0)
StartQuiz = tk.Button(self, text="Start Quiz", command=lambda: controller.show_frame(STAGE1))
StartQuiz.grid(row=8, column=1)
class STAGE1(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
Stage1 = tk.Label(self, text="STAGE 1")
Stage1.grid(column=1, row=0)
#Explain the Main class and tk frame constructor in each class from stack overflow
self.ButtonData = BUTTONDATA(self, tk.Frame)
self.ButtonData.ReagentOption1.config(command=lambda: self.AllocatePointsStage(1))
self.ButtonData.ReagentOption2.config(command=lambda: self.AllocatePointsStage(1))
self.ButtonData.ReagentOption3.config(command=lambda: self.AllocatePointsStage(1))
self.ButtonData.ReagentOption4.config(command=lambda: self.AllocatePointsStage(1))
self.ButtonData.ConditionOption1.config(command=lambda: self.AllocatePointsStage(1))
self.ButtonData.ConditionOption2.config(command=lambda: self.AllocatePointsStage(1))
self.ButtonData.ConditionOption3.config(command=lambda: self.AllocatePointsStage(1))
self.ButtonData.ConditionOption4.config(command=lambda: self.AllocatePointsStage(1))
self.ButtonData.ReagentOption1.grid(column=2, row=5)
self.ButtonData.ReagentOption2.grid(column=2, row=6)
self.ButtonData.ReagentOption3.grid(column=2, row=7)
self.ButtonData.ReagentOption4.grid(column=2, row=8)
self.ButtonData.ConditionOption1.grid(column=10, row=5)
self.ButtonData.ConditionOption2.grid(column=10, row=6)
self.ButtonData.ConditionOption3.grid(column=10, row=7)
self.ButtonData.ConditionOption4.grid(column=10, row=8)
self.Continue = tk.Button(self, text="Continue", command=lambda: controller.show_frame(Stage2))
self.Continue.grid(column=6)
self.QuestionStarter = QUESTIONSTARTER(self, tk.Frame)
self.QuestionStarter.PointsLabel.grid(row=0, column=6)
self.QuestionStarter.AttemptsDisplayed.grid(row=1, column=7)
self.QuestionStarter.WordedQuestion.grid(row=0, column=1)
self.QuestionStarter.AttemptsDisplayedText.grid(row=1, column=8)
DesiredProductLabel = tk.Label(self, command=lambda: ShowDesiredProduct(DesiredProduct))
DesiredProductLabel.grid(row=5, column=0)
def ShowDesiredProduct(self, DesiredProduct):
DesiredProduct = GetDesiredProduct()
return DesiredProduct
class Main(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.wm_title(self, "Chemistry Quiz")
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (STUDENTLOGINPAGE, STAFFLOGINPAGE, STARTPAGE, ASSIGNMENTPAGE, STAGE1, STAGE2, STAGE3, STAGE4, STAGE5, LEADERBOARDPAGE):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame(STUDENTLOGINPAGE)
if self.frames == []:
print ("Error in loading program")
#This class inherits from Tk class within module of Tk Inter
#This basically displays each page in turn from the List
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
def get_page(self, page_class):
return self.frames[page_class]
, 내가 1 단계 내 쇼 프레임 내에서 발생하는 다음과 같은 오류를 얻을 :
Error -Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/tkinter/__init__.py", line 1549, in __call__
return self.func(*args)
File "/Users/ammarhusain/Desktop/Computing Project/Ammar Chemistry Program FINAL.py", line 316, in <lambda>
StartQuiz = tk.Button(self, text = "Start Quiz", command=lambda: controller.show_frame(STAGE1))
File "/Users/ammarhusain/Desktop/Computing Project/Ammar Chemistry Program FINAL.py", line 3152, in show_frame
frame = self.frames[cont]
KeyError: <class '__main__.STAGE1'>
입니까? – VMAtm
그것은 학생 로그인을위한 페이지 인 또 다른 클래스입니다. 공간을 차지할 수 없었습니다 @VMAtm – Ammar
KeyError를 디버그하는 첫 번째 단계는 사전에서 키를 출력하여 오류가 발생한 코드 바로 앞에 출력하고, 사전에있는 키가 실제로 사전에 있는지 확인하십시오. 또한'cont'에 여러분이 생각하는 내용이 포함되어 있는지 확인해야합니다. –