注意:我已经尝试过从https://docs.python.org/3/和其他堆栈溢出问题中找到解决方案,但一直未能找到。
我要找的东西很简单。在使用这样的代码时:
import turtle
s = turtle.Screen()
def u():
t.forward(50)
s.onkey(u(), "Up")
s.listen()它只是运行代码u,所以首先:为什么它不等待直到我按下“向上”?其次,我怎样才能做到这一点呢?
发布于 2016-03-14 01:48:25
您需要在onkey回调函数之外执行u和listen调用。
如下所示:
import turtle
def u():
t.forward(50)
s = turtle.Screen()
t = turtle.Turtle()
s.onkey(u, "Up")
s.listen()
turtle.done()注意,在s.onkey(u, "Up")中,我只有u 而不是 u()。前者将函数本身传递给.onkey,因此它知道在发生"Up"键事件时调用哪个函数。后者只是将调用u (即None,因为u没有return语句)的结果传递给.onkey。
此外,您的代码省略了turtle.done()调用。这就告诉乌龟进入事件循环,这样它就会监听事件并对事件做出反应。没有它,脚本打开一个乌龟窗口,然后立即关闭它。
顺便说一句,您发布的代码有一个IndentationError;正确的缩进在Python中是至关重要的。
发布于 2016-03-14 01:50:08
在函数后面加上括号时,将调用该函数。只需取出这些以传递函数本身,而不是它返回的内容:
import turtle
s = turtle.Screen()
def u():
t.forward(50)
s.onkey(u, "Up")
s.listen()在Python中,函数和其他所有东西一样都是对象。您不需要使用括号来使用它们。您可以执行v = u,然后就可以使用v()了。如果您说的是u = 4,那么您就不能再使用u()了,因为现在u指的是其他东西。
https://stackoverflow.com/questions/35978153
复制相似问题