У меня есть 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. Я контролирую реле, используя малиновый пи. Всякий раз, когда я запускаю этот код и нажимаю кнопку, он приводит к сбою программы.
Спасибо
мне удалось заставить это работать, используя частичные и установив 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)
Извините, если это предложение звучит глупо, но что, если вы добавите блок 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)