turtle.onclick()无法正常工作

时间:2019-04-06 13:27:24

标签: python turtle-graphics

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

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()

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

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

4 个答案:

答案 0 :(得分:3)

onscreenclick以函数作为参数。您不应该打电话给tur_race,当单击时,turtle会这样做,而您应该自己传递tur_race。这称为回调,您提供了某个事件监听器要调用的函数或方法(例如,在屏幕上单击鼠标)。

答案 1 :(得分: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。否则,它将立即被调用。

希望这会有所帮助!

答案 2 :(得分:1)

turtle.onscreenclick( tur_race )之后,您需要()不包含tur_race


Python可以将函数的名称(不带()和参数)分配给变量,并在以后使用它-例如示例

show = print
show("Hello World")

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

(以不同的编程语言提供)此功能的名称称为"callback"

turtle.onscreenclick( tur_race )中,您将名称发送给功能onscreenclick,然后turtle将在以后使用此功能-单击屏幕。


如果您在()中使用turtle.onscreenclick( tur_race() ),则会遇到情况

result = tur_race()
turtle.onscreenclick( result )

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

答案 3 :(得分:1)

除了大家的回答,还需要在tur_race函数中添加x和y参数。这是因为海龟将 x 和 y 参数传递给函数,因此您的代码如下所示:

from turtle import *
def tur_race(x, y):
    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()