【发布时间】:2018-01-29 23:38:02
【问题描述】:
我有一个使用 Python 5.3 和 PyQt 7.1 开发的应用程序(我认为)。到目前为止,我在 GUI 中的一切工作都很好。我现在需要能够通过 GPIO.add_event_detect 检测两个外部机械按钮的按下。我添加了用于检测信号下降沿的 GPIO 命令,当我尝试执行代码时,我得到“已为此 GPIO 通道启用冲突沿检测”。
我尝试将代码移动到不同的类(它不在while循环中)只是为了看看我是否会得到不同的错误。
我正在寻找任何说明如何将 add_event_detect 用于 QT 等基于事件的应用程序的文档或说明。
一如既往,非常感谢!
迈克
编辑: 我尝试了下面的建议,但我遇到了执行问题。下面的代码只有三个类——我没有添加可执行代码,因为我不确定是否有人愿意花时间将 2 个 N.C. 按钮添加到 GPIO 引脚。我希望您只需阅读代码就能看到问题。
ExecuteSession 类工作正常。我正在尝试添加读取 PStop 和 EStop 类中 GPIO 引脚 16 和 18 上两个信号的下降沿的能力。当 ExecuteSession 启动时,我可以看到打印语句“In PStop”和“In EStop”。当我按下按钮时,我看不到其他打印语句。我对 Python 和 Threads 很陌生,如果有任何建议,我将不胜感激。
我确实创建了一个小测试程序来确保 Pi 看到状态转换,它确实做到了。
谢谢
class PStop(QThread):
PT_event_detected = pyqtSignal(int)
def __init__(self):
QThread.__init__(self)
self.queue=Queue()
GPIO.add_event_detect(16, GPIO.FALLING, callback=self.queue.put)
print("In PStop")
def run(self):
while True:
print("In PStop Run")
self.PT_event_detected.emit(self.queue.get())
print("PT EVENT " +str(self.queue.get()))
class EStop(QThread):
ER_event_detected = pyqtSignal(int)
def __init__(self):
QThread.__init__(self)
self.queue=Queue()
GPIO.add_event_detect(18, GPIO.FALLING, callback=self.queue.put)
print("In EStop")
def run(self):
while True:
print("In EStop Run")
self.ER_event_detected.emit(self.queue.get())
print("ER EVENT " +str(self.queue.get()))
class ExecuteSession(QThread):
PBValueSig = pyqtSignal(int)
PBValueDone = pyqtSignal(int)
PBValuePause = pyqtSignal(int)
PBTimeActual = pyqtSignal(int)
durComplete = 0
def __init__(self, dur='', pause='', stopExe =''):
QThread.__init__(self)
self.dur = dur
self.pause = pause
self.stopExe = stopExe
self.E_Stop = EStop()
self.E_Stop.ER_event_detected.connect(self.Ext_Stop_Detect)
self.E_Stop.start()
self.P_Stop = PStop()
self.P_Stop.PT_event_detected.connect(self.Ext_Stop_Detect)
self.P_Stop.start()
def stop(self):
self.stop()
def __del__(self):
self.wait()
def run(self):
i = 1
while i <= dur: #self.dur:
iA = i
if self.stopExe == True:
durComplete = i
i = self.dur + 1 #Complete
elif self.pause == False: #12/15 added el
self.PBValueSig.emit(i)
i = i + 1
durComplete = i
time.sleep(1)
self.PBTimeActual.emit(iA)
time.sleep(1)
self.PBValueDone.emit(durComplete)
def Ext_Stop_Detect(self, channel):
print("CHANNEL " +str(channel))
【问题讨论】:
-
PyQt 7.1 ??????Python 5.3 ?????什么??你在一个非常遥远的未来
-
显示你的代码。
-
呃……我老了! Python 3.5 和 QT 5.?
-
你的问题不清楚,编辑你的问题并添加你尝试过的代码,除了解释你的问题是什么。
-
如果你用raspberry-pi标签标记它也会有所帮助
标签: python pyqt pyqt5 raspberry-pi3 gpio