turtle.onclick()不能正常工作

问题描述 投票:3回答:3

我有一个简单的海龟比赛脚本,我希望比赛在用户点击鼠标左键时开始,所以我有这个代码

def tur_race():
    for step in range(0, 135):
        tur1.forward(randint(1, 5))
        tur2.forward(randint(1, 5))


turtle.pu()
turtle.goto(-250, -150)
turtle.write("click the mouse to start")
turtle.ht()
turtle.onscreenclick(tur_race())
turtle.mainloop()

假设我已经定义了所有变量。

当我运行此代码时,比赛自动开始,不等待点击。

python turtle-graphics
3个回答
3
投票

onscreenclick将函数作为其参数。你不应该打电话给tur_race,龟会在点击时这样做,而你应该通过tur_race本身。这称为回调,您提供一个由某个事件侦听器调用的函数或方法(例如,在屏幕上单击鼠标)。


2
投票

除了@nglazerdev优秀的答案,这将是你应用他说的后你的代码。

from turtle import *
def tur_race():
    for step in range(0, 135):
        tur1.forward(randint(1, 5))
        tur2.forward(randint(1, 5))


turtle.pu()
turtle.goto(-250, -150)
turtle.write("click the mouse to start")
turtle.ht()
turtle.onscreenclick(tur_race)
turtle.mainloop()

你在()函数中取出tur_race。否则,它会立即被调用。

希望这可以帮助!!


1
投票

turtle.onscreenclick( tur_race )之后你需要没有()tur_race


Python不能将函数的名称(没有()和参数)赋给变量并在以后使用它 - 比如示例

show = print
show("Hello World")

它也可以使用函数名作为其他函数的参数,此函数稍后将使用它。

Offen(用不同的编程语言)这个函数的名字叫做"callback"

turtle.onscreenclick( tur_race )中,您将名称发送到功能onscreenclickturtle将在稍后使用此功能 - 当您单击屏幕时。


如果你在()中使用turtle.onscreenclick( tur_race() )那么你就有情况

result = tur_race()
turtle.onscreenclick( result )

这在您的代码中不起作用,但在其他情况下可能有用。

© www.soinside.com 2019 - 2024. All rights reserved.