Непрерывное получение данных с помощью PyQt GUI - PullRequest
0 голосов
/ 29 мая 2018

Я создаю приложение, в котором непрерывно собираю данные с устройства National Instruments и выполняю некоторую обработку в реальном времени.Я пытаюсь подключить часть сбора данных к графическому интерфейсу PyQt, чтобы пользователь мог запускать, останавливать и настраивать сбор данных и просматривать их.У меня есть один класс для сбора данных и один класс для графического интерфейса.Я запускаю процесс сбора данных в виде потока в графическом интерфейсе:

# 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 при нажатии кнопки остановки.Хотя это работает, мне не нравится опрос, поскольку я думаю, что это может негативно повлиять на производительность моего приложения.

...