Python 使用Tkinter时无法获取要更新的分数

Python 使用Tkinter时无法获取要更新的分数,python,tkinter,Python,Tkinter,我试图在Tkinter上创建一个小测验游戏,当按下按钮时,我无法正确更新分数。它没有显示500,而是显示0,并且不会“激活”更新分数的功能。按下按钮时,如何正确显示分数 score = 0 class SampleApp(tk.Tk): def __init__(self): tk.Tk.__init__(self) self._frame = None self.switch_frame(MainMenu) def switch

我试图在Tkinter上创建一个小测验游戏,当按下按钮时,我无法正确更新分数。它没有显示500,而是显示0,并且不会“激活”更新分数的功能。按下按钮时,如何正确显示分数

score = 0
class SampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self._frame = None
        self.switch_frame(MainMenu)

    def switch_frame(self, frame_class):
        new_frame = frame_class(self)
        if self._frame is not None:
            self._frame.destroy()
        self._frame = new_frame
        self._frame.pack()


class MainMenu(tk.Frame):
    def __init__(self, master):
        #Maths Picture/Button
        global photo
        tk.Frame.__init__(self, master)
        photo = PhotoImage(file = "MathsPicture.png")
        photoimage = photo.subsample(3,3)
        tk.Label(self, text="MainMenu", font=('Verdana', 18, "bold")).pack(side="top", fill="x", pady=5)
        tk.Button(self, image = photo, command=lambda: master.switch_frame(PageOne)).pack(side="left")
        tk.Button(self, text="Go to page two",command=lambda:[master.switch_frame(PageTwo), event()]).pack()
        
def event(event=None):
    global score
    score += 500
    print(score)
    

class PageOne(tk.Frame):
    global score
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        tk.Frame.configure(self,bg='blue')
        tk.Label(self, text="Page one", font=('Helvetica', 18, "bold")).pack(side="top", fill="x", pady=5)
        tk.Label(self, text=score , font=("Verdana", 18, "bold")).pack(side="bottom")
        tk.Button(self, text="Go back to start page",
                  command=lambda: master.switch_frame(MainMenu)).pack()

class PageTwo(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        tk.Frame.configure(self,bg='red')
        tk.Label(self, text="Page two", font=('Helvetica', 18, "bold")).pack(side="top", fill="x", pady=5)
        tk.Button(self, text="Go back to start page",
                  command=lambda: master.switch_frame(MainMenu)).pack()

if __name__ == "__main__":
    window = SampleApp()
    window.geometry("800x800")
    window.mainloop()

第一个函数Score()不返回任何内容

最简单的解决方案是将score设置为全局变量,并在事件发生时执行

score += 500
这与
score=score+500
作为文本,只需做
score
,这是一个变量,您应该将其设置为全局变量

编辑代码:

score = 0
class SampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self._frame = None
        self.switch_frame(MainMenu)

    def switch_frame(self, frame_class):
        new_frame = frame_class(self)
        if self._frame is not None:
            self._frame.destroy()
        self._frame = new_frame
        self._frame.pack()


class MainMenu(tk.Frame):
    def __init__(self, master):
        #Maths Picture/Button
        global photo
        tk.Frame.__init__(self, master)
        photo = PhotoImage(file = "MathsPicture.png")
        photoimage = photo.subsample(3,3)
        tk.Label(self, text="MainMenu", font=('Verdana', 18, "bold")).pack(side="top", fill="x", pady=5)
        tk.Button(self, image = photo, command=lambda: master.switch_frame(PageOne)).pack(side="left")
        tk.Button(self, text="Go to page two",command=lambda:[master.switch_frame(PageTwo), Score()]).pack()
        
def event(event=None):
    global score
    score += 500
    # asign this function to a button or sth

class PageOne(tk.Frame):
    global score
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        tk.Frame.configure(self,bg='blue')
        tk.Label(self, text="Page one", font=('Helvetica', 18, "bold")).pack(side="top", fill="x", pady=5)
        tk.Label(self, text=score , font=("Verdana", 18, "bold")).pack(side="bottom")
        tk.Button(self, text="Go back to start page",
                  command=lambda: master.switch_frame(MainMenu)).pack()
        tk.Button(self, text='Update score', command=event)

class PageTwo(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)
        tk.Frame.configure(self,bg='red')
        tk.Label(self, text="Page two", font=('Helvetica', 18, "bold")).pack(side="top", fill="x", pady=5)
        tk.Button(self, text="Go back to start page",
                  command=lambda: master.switch_frame(MainMenu)).pack()
        tk.Button(self, text='Update score', command=event)

text=Score
表示将函数本身指定为要显示的文本,而不是实际调用函数的结果。这将是
text=Score()
,尽管这也没有任何用处,因为函数不返回任何内容,如果您希望在名为
score
的函数中更新全局变量
score
,则应在函数开头使用
global score
。在我将导入添加到顶部后,您当前的示例代码似乎可以正常工作。单击图像,它会转到第1页显示分数,当您从主页上按转到第2页按钮时,它会添加分数。问题解决了吗?我已经更新了代码,但是分数仍然不会更新。问题已更新,以显示新代码和问题您需要有一个按钮或事件绑定来执行event()。我对我的代码做了一些调整,现在就试试吧。另外,正如我所注意到的,你可以只创建一个类->窗口,例如,然后创建该类的两个实例来创建两个页面。正如我所注意到的,你可以只创建一个类->窗口,例如,然后创建该类的两个实例来创建两个页面。您可以检查以更好地理解类