使用PyQt GUI连续数据采集

时间:2018-05-29 18:49:57

标签: python pyqt python-multithreading nidaqmx

我正在构建一个应用程序,我从NI设备连续获取数据并对其进行实时处理。我试图将采集部分挂钩到PyQt GUI,以便用户可以启动,停止和配置数据采集并查看数据。我有一个用于数据采集的类和一个用于GUI的类。我将数据采集过程作为GUI中的一个线程启动:

# data acquisition class
class intensimetre():    
   #initialize the data acquisition
   def __init__(self,app=None,l1=None,l2=None,l3=None):    

       #...

   #start the data acquisition 
   def demarrer(self,fs=51200.,sensibilite0=12.2,sensibilite1=10.7, rho=1.21, espaceur=0.012, c=343):

       #start the acquisition task
       nidaq.DAQmxStartTask(tache)

    #if i add this line it works       
    #raw_input(u'appuyez sur entree pour continuer')

#gui class
class GUI_acquisition(QtGui.QWidget):
   def __init__(self, app=None):

       super(GUI_acquisition, self).__init__()

       #create the gui
       #...

       #create an instance of the data acquisition class   
       self.intensimetre=
       intensimetre(app=self.app,l1=self.l1,l2=self.l2,l3=self.l3)    

   def demarrer(self):

       #start the data acquisition in a thread
       t = threading.Thread(target=self.intensimetre.demarrer)
       t.start()

问题是,一旦我开始数据采集,应用程序就会崩溃。如果我在开始采集后添加raw_input行,那么它可以正常工作。但是,它并不是一种正确的方法。似乎一旦采集开始,线程就会返回,并且不能正确处理来自采集的回调。知道怎么解决这个问题吗?

更新

我已通过无限循环替换了raw_input行,并将状态属性轮询为状态属性:

while self.isRunning:
    sleep(0.1)

我在用户按下开始按钮时将isRunning设置为True属性,并在按下停止按钮时设置为False。虽然这有效,但我不喜欢民意调查,因为我认为它会对我的应用程序的性能产生负面影响。

0 个答案:

没有答案