QPushButton, чтобы отключить все остальные кнопки, если не нажать снова - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть 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)

Я разработал графический интерфейс с использованием QtDesigner и Im с использованием pyqt5 на python 3.7.Я управляю реле, используя Raspberry Pi.Всякий раз, когда я запускаю этот код и нажимаю кнопку закрытия, это вызывает сбой программы.

Спасибо

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Мне удалось заставить это работать, используя партиалы и установив для 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)
0 голосов
/ 24 сентября 2018

Извините, если это предложение звучит глупо, но что, если вы добавите блок Try кроме блока OuterDoorClose и отладите свой код?Это может помочь вам понять, какая строка кода вызывает сбой программы и почему.Например:

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)
...