QPushButton,禁用所有其他按钮,除非再次按下

时间:2018-09-24 08:02:59

标签: python python-3.x delay raspberry-pi3 qpushbutton

我有4个按钮(打开外部,关闭外部,打开内部,关闭内部),它们控制2个门(通过2个继电器),一个内门和一个外门。一次只能打开一个门,我已经整理了这么多代码,现在的问题是当我关闭外门时,我希望它禁用除“打开”外门按钮之外的所有其他按钮。这可能吗?我将在下面粘贴我的代码的相关部分:

 #@QtCore.pyqtSlot()
    def OuterDoorOpen(self):
        if Door2_Channel == 0:
            return GPIO.output(self.Door1,GPIO.HIGH)
        else:
            return "Please Close Inner Door"

    #@QtCore.pyqtSlot()
    def OuterDoorClose(self):
        if Door2_Channel == 1:
            return
                GPIO.output(self.Door2,GPIO.LOW), self.pushButton_2.setEnabled(False),
self.pushButton_3.setEnabled(False),
self.pushButton_4.setEnabled(False)


    #@QtCore.pyqtSlot()
    def InnerDoorOpen(self):
        if Door1_Channel == 0:
            return GPIO.output(self.Door2,GPIO.HIGH)
        else:
            return "Please Close Outer Door"

    #@QtCore.pyqtSlot()
    def InnerDoorClose (self):
        if Door1_Channel == 1:
            return GPIO.output(self.Door2,GPIO.LOW)

我使用python 3.7上的QtDesigner和Im使用pyqt5设计了GUI。我正在使用树莓派控制继电器。每当我运行此代码并按下按钮将其关闭时,就会导致程序崩溃。

谢谢

2 个答案:

答案 0 :(得分:0)

很抱歉,如果该建议听起来很愚蠢,但是如果您在OuterDoorClose块中添加一个tryexcept块并调试代码,该怎么办?它可以帮助您了解导致程序崩溃的代码行以及原因。例如:

self.timer = QtCore.QTimer()
self.timer.timeout.connect(self.enable_buttons)

#@QtCore.pyqtSlot()
def OuterDoorClose(self):
    try:
        if Door2_Channel == 1:
            self.pushButton_2.setEnabled(False)
            self.pushButton_3.setEnabled(False)
            self.pushButton_4.setEnabled(False)
            self.timer.start(30000)
            return GPIO.output(self.Door2,GPIO.LOW)
    except Exception as e:
        #Your exception code



def self.enable_buttons(self):
    self.pushButton_2.setEnabled(True)
    self.pushButton_3.setEnabled(True)
    self.pushButton_4.setEnabled(True)

答案 1 :(得分:0)

我设法通过使用局部函数并将SetEnabled设置为False来使其工作。这是代码的相关部分。

def OuterDoorClose(self):
    if GPIO.input(Outer)==0: #Outer Door Open
        self.ui.pushButton_3.setEnabled(False)
        self.ui.pushButton_4.setEnabled(False)
        QtCore.QTimer.singleShot(10000,partial(self.ui.pushButton_3.setEnabled,True))
        return GPIO.output(Outer,GPIO.HIGH)