<p>您的问题是识别按钮向下和按钮向上事件。您的操作系统鼠标驱动程序为您的鼠标按钮执行此操作。如果GPIO模块没有为您执行此操作,则必须通过比较当前状态与以前的状态来检测这些事件。(我在这里忽略了任何可能需要“去弹跳”按钮的情况。)您正在尝试使用时间。睡觉(5)调用,但不使用时间。睡觉在gui代码中。在</p>
<p>您的驱动程序应该是自包含的,并且独立于除.after所需的根之外的任何tk小部件。你需要多个按钮,你需要自己的类。你的代码是一个起点。Tkinter允许您将命令绑定到按钮事件。类init应该类似地使用启动和/或关闭事件命令(回调)。在</p>
<p>这里有一些未经测试的东西可能会让你开始。在</p>
<pre><code>class GPIOButton:
def __init__(self, master, buttons, command_down=None, command_up=None):
self.master = master
self.buttons = buttons
self.command_down = command_down
self.command_up = command_up
GPIO.setmode(GPIO.BOARD)
for button in buttons:
GPIO.setup(button, GPIO.IN)
self.state = [GPIO.HIGH] * len(buttons) # best initial value?
self.check_buttons() # or call this elsewhere
def check_buttons(self):
for i, button in enumerate(self.buttons):
oldstate = self.state[i]
newstate = GPIO.input(button)
if oldstate != newstate:
self.state[i] = newstate
command = (self.command_down if newstate==GPIO.LOW
else self.command_up)
command(button)
self.master.after(10, self.check_button)
</code></pre>