首页 > 解决方案 > 为什么这种在 Python 中使用 Turtle 模块检测按键的方法不起作用?

问题描述

读过...

如何使用乌龟记录按键?

我正在尝试使用稍微不同的方法检测按键。

这是我的代码的简化版本,它按预期工作......

from turtle import *

WIDTH, HEIGHT = 500, 500
screen = Screen()
screen.setup(WIDTH, HEIGHT)
bgcolor('grey')
ht()
pu()
    
def checka():
    write('a')
    fd(10)
def checkb():
    write('b')
    fd(10)

screen.onkey(checka, 'a')
screen.onkey(checkb, 'b')

screen.listen()
screen.mainloop()

但是我希望处理所有字母的按键,所以尝试了这个......

from turtle import *

WIDTH, HEIGHT = 500, 500
screen = Screen()
screen.setup(WIDTH, HEIGHT)
bgcolor('grey')
ht()
pu()
    
def check(l):
    write(l)
    fd(10)

screen.onkey(check('a'), 'a')
screen.onkey(check('b'), 'b')

screen.listen()
screen.mainloop()

但是这段代码不起作用。任何人都可以阐明这里发生的事情或提出实现相同目标的替代(但同样简单)方法吗?

标签: pythonpython-turtlepartial-application

解决方案


我猜这screen.onkey()需要一个它调用的函数。

您的代码:screen.onkey(check('a'), 'a')而是调用函数并返回None不是函数。

您可以使用以下方法创建自己的函数lambda

screen.onkey(lambda :check('a'), 'a')

如果您想调用onkey()字母表中的每个字母,那么您可以轻松地进行循环,但不会陷入范围问题:

import string

for c in string.ascii_lowercase:
    screen.onkey(lambda c=c:check(c), c)

推荐阅读