Python 防止Tkinter按钮按下排队

Python 防止Tkinter按钮按下排队,python,tkinter,Python,Tkinter,我正在做一个小项目,有一个raspberry pi和一个2.8英寸电容式触摸屏。我是python新手,需要防止多个按钮按下排队。理想的行为是UI在执行上一个按钮按下时忽略任何按钮按下。下面是我的代码: from Tkinter import * import RPi.GPIO as GPIO import time #pin assignments A=11 B=13 C=15 D=12 E=16 FAN=8 GPIO.setwarnings(False) GPIO.setmode(GPIO

我正在做一个小项目,有一个raspberry pi和一个2.8英寸电容式触摸屏。我是python新手,需要防止多个按钮按下排队。理想的行为是UI在执行上一个按钮按下时忽略任何按钮按下。下面是我的代码:

from Tkinter import *
import RPi.GPIO as GPIO
import time

#pin assignments
A=11
B=13
C=15
D=12
E=16
FAN=8

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(A, GPIO.OUT)
GPIO.setup(B, GPIO.OUT)
GPIO.setup(C, GPIO.OUT)
GPIO.setup(D, GPIO.OUT)
GPIO.setup(E, GPIO.OUT)
GPIO.setup(FAN, GPIO.OUT)

class App:
  def fanOn(self):
    GPIO.output(FAN,True)
  def fanOff(self):
    GPIO.output(FAN,False)
  def btnClicked(self,atty):
    GPIO.output(atty,True)
    self.fanOn()
    time.sleep(5)
    GPIO.output(atty,False)
    self.fanOff()
  def __init__(self, master):
    frame = Frame(master)
    frame.pack()
    self.buttonA = Button(frame, text="Fire A", fg="red", command=lambda: self.btnClicked(A))
    self.buttonA.pack(side=LEFT)
    self.buttonB = Button(frame, text="Fire B", fg="red", command=lambda: self.btnClicked(B))
    self.buttonB.pack(side=LEFT)
    self.buttonC = Button(frame, text="Fire C", fg="red", command=lambda: self.btnClicked(C))
    self.buttonC.pack(side=LEFT)
    self.buttonD = Button(frame, text="Fire D", fg="red", command=lambda: self.btnClicked(D))
    self.buttonD.pack(side=LEFT)
    self.buttonE = Button(frame, text="Fire E", fg="red", command=lambda: self.btnClicked(E))
    self.buttonE.pack(side=LEFT)

root = Tk()
app = App(root)
root.mainloop()

感谢您的帮助!

您的应用程序真的在调用时间。睡眠(5)?如果不是,请告诉我们它真正在做什么。如果是,可能有更好的方法来完成您正在尝试做的事情。一般来说,GUI程序的主线程永远不应该调用
time.sleep
。正如我所说,对于python和这种类型的编程来说非常陌生。我确实在调用time.sleep()。我正在尝试使用tkinter按钮触发打开mosfet的控制信号,我需要它保持打开状态5秒。更好的方法是什么?您可以禁用按钮并在完成时启用它们,或者在完成后打包忘记(),然后打包。请参阅“状态”=参数at如果要禁用一段时间,则当前时间(作为函数的第一行)必须比上一次执行的时间大x,否则简单返回将退出函数而不执行任何操作。