如何绑定乌龟中的按钮?
How to bind a button in turtle?
注意:我已经尝试从 https://docs.python.org/3/ 和其他堆栈溢出问题中找到解决方案,但一直找不到。
我要找的东西很简单。使用这样的代码时:
import turtle
s = turtle.Screen()
def u():
t.forward(50)
s.onkey(u(), "Up")
s.listen()
它只是运行代码 u
所以首先:为什么它不等到我按下 "Up"?其次,我怎样才能做到这一点?
您需要 onkey
和 listen
调用 在 之外 u
回调函数。
像这样:
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()
调用。这告诉 turtle 进入事件循环,因此它将监听事件并响应它们。没有它,脚本会打开一个乌龟 window,然后立即将其关闭。
顺便说一句,您发布的代码有一个 IndentationError
;正确的缩进是 vital in Python.
当你在函数后面加上括号时,你就是在调用函数。只是把那些拿出来传递函数本身而不是它 returns:
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://docs.python.org/3/ 和其他堆栈溢出问题中找到解决方案,但一直找不到。
我要找的东西很简单。使用这样的代码时:
import turtle
s = turtle.Screen()
def u():
t.forward(50)
s.onkey(u(), "Up")
s.listen()
它只是运行代码 u
所以首先:为什么它不等到我按下 "Up"?其次,我怎样才能做到这一点?
您需要 onkey
和 listen
调用 在 之外 u
回调函数。
像这样:
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()
调用。这告诉 turtle 进入事件循环,因此它将监听事件并响应它们。没有它,脚本会打开一个乌龟 window,然后立即将其关闭。
顺便说一句,您发布的代码有一个 IndentationError
;正确的缩进是 vital in Python.
当你在函数后面加上括号时,你就是在调用函数。只是把那些拿出来传递函数本身而不是它 returns:
import turtle
s = turtle.Screen()
def u():
t.forward(50)
s.onkey(u, "Up")
s.listen()
在Python中,函数就像其他一切一样都是对象。您不需要括号即可使用它们。你可以做 v = u
并且你可以使用 v()
。如果你说 u = 4
,你将无法再使用 u()
,因为现在 u
指的是别的东西。