如何绑定乌龟中的按钮?

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"?其次,我怎样才能做到这一点?

您需要 onkeylisten 调用 之外 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 指的是别的东西。