python - 为什么这种在 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()
但是这段代码不起作用。任何人都可以阐明这里发生的事情或提出实现相同目标的替代(但同样简单)方法吗?
解决方案
我猜这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)
推荐阅读
- javascript - amcharts 更改 ID 数组的填充颜色
- javascript - 为什么我的 Promise.race 实现不起作用?
- bash - “set -t”在 bash 中有什么作用?
- vue.js - 保存失败的请求以便稍后重试?
- c# - 在推出 ASP.Net 网站的热修复程序时遇到问题?
- c# - 如何在 WinCell 中查找文本对齐?
- arduino - 如何执行 USB 主机指纹识别?
- typescript - 元素 UI 树数据未使用 Vue 更新
- spotify-scio - 是否可以使用 scio JobTest 控制输入处理时间?
- machine-learning - 机器学习和计算机视觉之间的区别