QPushButton, чтобы отключить все остальные кнопки, если не нажать снова

1

У меня есть 4 кнопки (открытый внешний, закрытый внешний, открытый внутренний, закрытый внутренний), которые управляют двумя дверцами (через 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)

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

Спасибо

Теги:
python-3.x
raspberry-pi3
qpushbutton
delay

2 ответа

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

Извините, если это предложение звучит глупо, но что, если вы добавите блок 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)
  • 0
    Здравствуйте @Chaitanya Bangera, я знаю, что проблема заключается в том разделе кода, который вы выделили, когда он удаляется, программа работает полностью нормально.
  • 0
    Хорошо, а вы знаете, что является исключением? Кроме того, мне было интересно, если есть необходимость возвращать операторы setEnabled? Будет ли это работать, если вы отключите кнопки перед возвратом значений? Я изменил код, чтобы отразить то, что я пытаюсь сказать.
Показать ещё 10 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню