QPushButton,禁用所有其他按钮,除非再次按下
QPushButton, to disable all other push buttons unless pressed again
我有 4 个按钮(打开外门、关闭外门、打开内门、关闭内门),它们控制 2 扇门(通过 2 个继电器)、一扇内门和一扇外门。一次只能打开一扇门,我已经整理了这么多代码,现在的问题是当我关闭外门时我希望它禁用除 "open" 外门之外的所有其他按钮门按钮。这可能吗?我将在下面粘贴我的代码的相关部分:
#@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 和我使用 pyqt5 设计了 GUI。我正在使用 raspberry pi 控制继电器。每当我 运行 这段代码并按下关闭按钮时,它都会导致程序崩溃。
谢谢
抱歉,如果这个建议听起来很愚蠢,但是如果您在 OuterDoorClose 块中添加一个 Try except 块并调试您的代码会怎样?它可能会帮助您了解哪一行代码导致程序崩溃以及原因。例如:
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)
我设法通过使用 partials 并将 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)
我有 4 个按钮(打开外门、关闭外门、打开内门、关闭内门),它们控制 2 扇门(通过 2 个继电器)、一扇内门和一扇外门。一次只能打开一扇门,我已经整理了这么多代码,现在的问题是当我关闭外门时我希望它禁用除 "open" 外门之外的所有其他按钮门按钮。这可能吗?我将在下面粘贴我的代码的相关部分:
#@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 和我使用 pyqt5 设计了 GUI。我正在使用 raspberry pi 控制继电器。每当我 运行 这段代码并按下关闭按钮时,它都会导致程序崩溃。
谢谢
抱歉,如果这个建议听起来很愚蠢,但是如果您在 OuterDoorClose 块中添加一个 Try except 块并调试您的代码会怎样?它可能会帮助您了解哪一行代码导致程序崩溃以及原因。例如:
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)
我设法通过使用 partials 并将 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)