用Python Turtle制作点击游戏时计数数值随机变动该如何修复?
问题根源
turtle.onclick()绑定的回调函数默认会自动传入两个参数:点击位置的横坐标x和纵坐标y,你定义的getclick(sq, clicks)里的两个参数实际接收到的是x、y坐标值,不是你预期的sq对象和全局计数变量,所以显示的数值都是点击位置的坐标,才会在-49~49之间波动。- 要在函数内修改全局作用域的
clicks变量,必须用global关键字声明,否则函数内操作的是同名局部变量,修改结果不会同步到全局计数上。
修复步骤
- 调整
getclick函数的参数,保留两个占位参数接收自动传入的x、y坐标即可,不需要额外传参 - 函数开头声明
global clicks,指定操作的是全局计数变量 - 可选补充主循环逻辑,避免程序运行完成后窗口直接退出
修复后完整代码
import turtle as t # 窗口配置 wn = t.Screen() wn.bgcolor("DarkSlateGray") wn.setup(width=1366, height=768) # 点击计数初始化 clicks = 0 # 可点击方块配置 sq = t.Turtle() sq.speed(0) sq.shape("square") sq.color("coral2") sq.shapesize(stretch_wid=5, stretch_len=5) sq.penup() sq.goto(0,0) # 计数文本画笔配置 pen = t.Turtle() pen.speed(0) pen.color("white") pen.penup() pen.hideturtle() pen.goto(0, 270) pen.write("Times clicked: 0", align="center", font=("Comic Sans MS", 24, "normal")) # 点击回调函数 def getclick(_, __): # 两个占位符承接自动传入的x、y坐标,不需要使用可以忽略 global clicks clicks += 1 pen.clear() pen.write("Times clicked: {}".format(clicks), align="center", font=('Comic Sans MS', 24, 'normal')) # 绑定点击事件 sq.onclick(getclick) # 启动窗口主循环 wn.mainloop()
内容的提问来源于stack exchange,提问作者clown person guy
相关产品推荐
相关产品推荐

