Python tkinter点击器游戏开发时分数变量无法更新问题
问题根源
你的分数无法持续增长是因为变量作用域问题:
- 你定义的全局
points是不可变的数值类型,作为参数传入click函数时,传递的只是值的拷贝,函数内修改的是局部的points参数,不会同步更新全局的points变量 - 每次点击调用
click时,传入的永远是初始值0,所以每次计算完都是1,不会持续累加
修正后的代码
from functools import partial from tkinter import * #Set up the window screen = Tk() screen.title("Clicker game") screen.geometry("700x700") #Variables points = 0 pointsAdded = 1 #Actual game def click(): global points # 声明使用全局的points变量 points += pointsAdded stringVar.set(str(points)) stringVar = StringVar() textPoints = Label(screen, textvariable = stringVar, font=("Courier", 20)) textPoints.grid(row=0, column=0) #Buttons myButton = Button(screen, text = " ", padx=50, pady=50, command=click) # 不需要lambda传参了 myButton.grid(row=5, column=1) screen.mainloop() # 补充主循环,避免窗口运行后直接闪退
补充说明
如果不想用global关键字,也可以把分数变量封装在列表、字典这类可变容器里,或者用类来管理游戏状态,避免全局变量污染。
内容的提问来源于stack exchange,提问作者Abjorn_36
相关产品推荐
相关产品推荐

