如何在海龟身上绑纽扣?

2024-04-19 11:06:04 发布

您现在位置:Python中文网/ 问答频道 /正文

注意:我已经尝试从https://docs.python.org/3/和其他堆栈溢出问题中找到解决方案,但是我没有找到。在

我要找的很简单。在使用这样的代码时:

import turtle
s = turtle.Screen()
def u():
t.forward(50)
s.onkey(u(), "Up")
s.listen()

它只是运行代码u,所以首先:为什么它不等到我按下“Up”键?第二,我怎样才能做到呢?在


Tags: 代码httpsorgimportdocs堆栈def解决方案
2条回答

当你在函数后面加上括号时,你正在调用它。只需取出这些值来传递函数本身而不是它返回的值:

import turtle
s = turtle.Screen()

def u():
    t.forward(50)

s.onkey(u, "Up")
s.listen()

在Python中,函数和其他东西一样都是对象。你不需要括号来使用它们。你可以做v = u,你将能够使用v()。如果你说u = 4,你就不能再使用u(),因为现在{}指的是其他东西。在

您需要执行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进入事件循环,这样它将侦听事件并对其作出响应。没有它,脚本会打开一个海龟窗口,然后立即关闭它。在


顺便说一句,您发布的代码有一个IndentationError;在Python中,正确的缩进是vital。在

相关问题 更多 >