为什么第一个PYQT信号发射而随后的信号不发射?

2024-06-17 15:48:17 发布

您现在位置:Python中文网/ 问答频道 /正文

以下代码位于从Arduino Uno板获取数据的线程中。向其他线程发送信号时遇到问题。第一个信号发射良好,并做它应该做的,但随后的信号不发射。我试着重新排列信号的顺序,让ai2,或io0先发射,它是一样的。我先放在上面运行的信号会被发出,而另外两个不会。有人知道为什么吗?你知道吗

class DaqThread(QtCore.QThread):
     def __init__(self,parent=None):
        super(DaqThread,self).__init__(parent)
        self.exiting = False
    #define QtCore.Signal variables to emit
     ai0 =    QtCore.Signal(str)
     ai2 =    QtCore.Signal(str)
     io0 =    QtCore.Signal(str)
     #io1 =    QtCore.Signal(str)
     #io2 =    QtCore.Signal(str)
     #io3 =    QtCore.Signal(str)
     #io4 =    QtCore.Signal(str)     
     ser = serial.Serial(usbport, 115200) #setup serial


     #get Arduino state

     def arduino(self):       
        lines = self.ser.readline()

        if 'A0' in lines[0:2]:     # -Repeat for other variables   
            stlen = len(lines)      #get string length
            ach0 = (lines[3:(stlen)]) 
            f0 = float(ach0)
            ach0 = f0 / 206.4 #change to volts
            ach0 = str(ach0)

        if 'A2' in lines[0:2]:     # -Repeat for other variables   
            stlen = len(lines)      #get string length
            ach2 = (lines[3:(stlen)]) 
            f2 = float(ach2)
            ach2 = f2 / 206.4 #change to volts            


        if 'D2:' in lines[0:3]:     # -Repeat for other variables   
            stlen = len(lines)      #get string length
            io0 = (lines[3:(stlen)]) 
            io0 = str(io0)


        self.ai0.emit(ach0)
        self.ai2.emit(ach2)
        self.io0.emit(io0)
        self.ser.flush()


     def run(self):
         while 1:
             try:
                 self.arduino()
             except:
                 pass
             time.sleep(0.005)

Tags: selfgetsignal信号defvariableslinesai2