如何设置多个框架

How to set up multiple frames

这是一个简单的数学游戏,目前正在进行中。循环从 mainGame() 开始,然后继续到 mainMenu()。我正在尝试创建 2 个框架; mframegframe 以便稍后 .destroy() 框架,实质上是为下一个框架清除以前的界面(类似于更改页面)。

错误:

Label(gframe, textvariable=self.question_var).pack() #gframe stands for game frame NameError: name 'gframe' is not defined

from tkinter import *
from random import randint

root = Tk()
mframe = Frame(root).pack()
gframe = Frame(root).pack()
frame.pack()
start = True

class mainMenu:
    def __init__(self):
        gframe.destroy() #gets rid of previous interface
        title = Label(mframe, text = "main menu").pack() #mfame stands for menu frame

class mainGame:
    def __init__(self):
        if start == False:
            mframe.destroy() #gets rid of previous interface

        #question
        self.question_var = StringVar()
        Label(gframe, textvariable=self.question_var).pack() #gframe stands for game frame

        #answer
        self.user_answer_var = StringVar()
        entry = Entry(gframe, textvariable=self.user_answer_var)
        entry.pack()
        submit = Button(gframe, text = "submit", command = self.check_answer).pack()

        #response output
        self.response_var = StringVar()
        self.count = 0
        self.score = 0
        Label(gframe, textvariable=self.response_var).pack()

        #starts loop
        self.ask_question()
        root.mainloop()

    def ask_question(self):
        if self.count == 1: 
            self.endGame()
        num1 = randint(1, 10)
        num2 = randint(1, 10)
        self.question_var.set("What is "+str(num1)+" + " +str(num2)+"?")
        self.true_answer = num1 + num2
        #print(self.true_answer) #testing purposes

    def check_answer(self):
        self.count += 1
        user_answer = self.user_answer_var.get()
        #print(user_answer) #testing purposes
        if int(user_answer) == self.true_answer:
            text = "Good job"
            self.score += 1
        else:
            text = "Oh no"
        self.response_var.set(text)

        #clear answer for next loop
        self.user_answer_var.set("")
        self.ask_question()

    def endGame(self):
        print("endGame")
        mainMenu()


mainGame()

如上评论所述,pack()方法returnsNone。您需要做的是首先创建两个框架并将它们分配给变量,然后再打包。这样,变量仍然指向框架实例而不是 None

你应该改变;

root = Tk()
mframe = Frame(root).pack()
gframe = Frame(root).pack()
frame.pack()
start = True

至;

root = Tk()
mframe = Frame(root)
gframe = Frame(root)
mframe.pack()
gframe.pack()
start = True