我有一个简单的海龟比赛脚本,我希望比赛在用户点击鼠标左键时开始,所以我有这个代码
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()
假设我已经定义了所有变量。
当我运行此代码时,比赛自动开始,不等待点击。
onscreenclick
将函数作为其参数。你不应该打电话给tur_race
,龟会在点击时这样做,而你应该通过tur_race
本身。这称为回调,您提供一个由某个事件侦听器调用的函数或方法(例如,在屏幕上单击鼠标)。
除了@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
。否则,它会立即被调用。
希望这可以帮助!!
在turtle.onscreenclick( tur_race )
之后你需要没有()
的tur_race
Python不能将函数的名称(没有()
和参数)赋给变量并在以后使用它 - 比如示例
show = print
show("Hello World")
它也可以使用函数名作为其他函数的参数,此函数稍后将使用它。
Offen(用不同的编程语言)这个函数的名字叫做"callback"
在turtle.onscreenclick( tur_race )
中,您将名称发送到功能onscreenclick
,turtle
将在稍后使用此功能 - 当您单击屏幕时。
如果你在()
中使用turtle.onscreenclick( tur_race() )
那么你就有情况
result = tur_race()
turtle.onscreenclick( result )
这在您的代码中不起作用,但在其他情况下可能有用。