我有一个简单的乌龟比赛脚本,我希望当用户单击鼠标左键时比赛开始,所以我有此代码
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()
假设我已经定义了所有变量。
当我运行此代码时,比赛会自动开始,并且不会等待点击。
答案 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()