在 Turtle 中单击时增加并显示数字

问题描述 投票:0回答:1

这是代码:

def money():
    money += 1
t.write('Money: ' + str(money))
player.onclick(money, 1)

乌龟身上出现的是:

Money: <function money at 0x00000249BA69B010>

我尝试更改格式和字符串,但它只是不会显示任何不同的内容

我正在寻找:

Money: 0
python turtle-graphics python-turtle
1个回答
2
投票

这里有几个问题。对于初学者来说,您不能使用变量

money
来同时表示两个事物。点击时运行的函数和表示玩家有多少钱的整数应该有单独的变量名称。由于函数通常是动作,所以我们将其称为
add_money
,并将整数称为
money

接下来,要跟踪多次点击的资金情况,

money
需要位于回调函数之外。为了能够从封闭范围内递增变量,我们需要
global
nonlocal
关键字。如果我们不使用外部函数闭包,
global
是这里唯一的选择。

t.write
仅在回调之外调用一次,因此每次单击后不会重写,除非有一些您未显示的附加循环代码。我们应该在循环中调用它,以便我们可以重新渲染当前的金额。

完成上述更改后,您会发现海龟对渲染、标签和单击有点挑剔。如果我们直接使用

t.write
,标签将被放置在海龟的顶部,使得再次点击变得困难。绘制标签时也会闪烁。为了解决这些问题,我添加了
tracer(0)
来禁用渲染,添加
update()
来渲染框架,并通过向上/向下画笔和移动来将标签定位在远离乌龟的位置,这样它就不会干扰点击命中框。

player.clear()
用于清除标签。

最后,默认情况下海龟很小,因此我将海龟变大,以便为用户提供较大的点击点击框。

欢迎您更改或删除任何与您的应用程序无关的外围用户体验决策,但我认为它们对于确保您可以轻松地与此示例进行交互是必要的。

from turtle import Screen, Turtle


def show_money():
    player.clear()
    player.forward(20)
    player.pendown()
    player.write(f"Money: {money}", font=("monospace", 16))
    player.penup()
    player.backward(20)


def add_money(x, y):
    global money
    money += 1
    show_money()
    Screen().update()


money = 0
Screen().tracer(0)
player = Turtle()
player.shape("circle")
player.penup()
player.turtlesize(1.2, 1.2)
player.onclick(add_money)
show_money()
Screen().update()
Screen().mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.