Python 使用Tkinter时无法获取要更新的分数
我试图在Tkinter上创建一个小测验游戏,当按下按钮时,我无法正确更新分数。它没有显示500,而是显示0,并且不会“激活”更新分数的功能。按下按钮时,如何正确显示分数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
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()。我对我的代码做了一些调整,现在就试试吧。另外,正如我所注意到的,你可以只创建一个类->窗口,例如,然后创建该类的两个实例来创建两个页面。正如我所注意到的,你可以只创建一个类->窗口,例如,然后创建该类的两个实例来创建两个页面。您可以检查以更好地理解类