我正在尝试将一些按钮连接到Raspberry Pi,以便在按下它们时有不同的行为。我希望他们每个人在按下或释放按钮时打印他们的姓名和状态。在这个例子中,我实例化了三个按钮,并在for循环中设置了它们的when_pressed
和when_released
属性:
#!/usr/bin/env python3
from gpiozero import LED, Button
from signal import pause
buttons = {
"bcn": Button(2),
"land": Button(3),
"taxi": Button(4)
}
for name, btn in buttons.items():
btn.when_pressed = lambda: print(name + ' ON')
btn.when_released = lambda: print(name + ' OFF')
print('ready')
pause()
但是,当我按下按钮时,它们会报告正确的状态,但所有状态都会报告相同的名称。例如,所有按钮都可能会报告bcn ON
或bcn OFF
。奇怪的是,当我重新启动脚本时,另一个 - 看似随机的名称被选择并且所有按钮都报告例如land ON
或land OFF
。
在我看来,它只是为所有按键处理程序创建一个lambda函数,并为所有发布处理程序创建一个。如何修改此脚本以打印每个按钮的正确名称?
答案 0 :(得分:2)
将你的lambda改为lambda name=name: print(name + ' ON')
。在您的情况下,name
绑定到name
上下文中的本地for
值。