def __init__(self, parent=None): QMainWindow.__init__(self) self.setupUi(self) print (pg.__version__) self.sb = SerialDAQ() while not self.sb.connected: msg = QMessageBox.critical(None, "Warning", u"DAQ board not connected.", QMessageBox.Retry | QMessageBox.Abort) if msg == QMessageBox.Retry: self.sb.open() else: sys.exit(1) self.updateTimer = QTimer() self.updateTimer.timeout.connect(self.update) self.pbSalidaDig1.clicked.connect(partial(self.activarDigital, 1)) self.pbSalidaDig2.clicked.connect(partial(self.activarDigital, 2)) self.pbSalidaDig3.clicked.connect(partial(self.activarDigital, 3)) self.pbSalidaDig4.clicked.connect(partial(self.activarDigital, 4)) self.pbActualizarEntDig.clicked.connect(self.actualizarEntDig) self.salidaDigital = 0x00 # Asigna valores iniciales por defecto a los parámetros de cada canal for i in range(NUM_CANALES): str_pendiente = 'pendiente_' + str(i + 1) pendiente = getattr(self, str_pendiente) str_ordenada = 'ordenada_' + str(i + 1) ordenada = getattr(self, str_ordenada) str_nombre = 'nombre_' + str(i + 1) nombre = getattr(self, str_nombre) str_unidad = 'unidad_' + str(i + 1) unidad = getattr(self, str_unidad) pendiente.setText(str(PENDIENTE_DEF)) ordenada.setText(str(0.0)) nombre.setText('Canal ' + str(i + 1)) unidad.setText('Volt') self.sb.config_analog(i + 1, name=nombre.text(), activate=False, calib=(float(ordenada.text()), float(pendiente.text()))) self.sb.activate_analog(1) self.midiendo = False self.guardado = True self.modo_continuo = False self.modo_burst = False self.modo_PWM = False self.vent_grafico = [] self.grafico = [] self.actionMedir.triggered.connect(self.medir) self.actionGuardar.triggered.connect(self.guardar) self.actionSalir.triggered.connect(self.close) self.pbActivatePWM.clicked.connect(self.activarPWM) self.dial.setTracking(True) self.dial_2.setTracking(True) self.dial.valueChanged.connect(self.atenderDial1) self.dial_2.valueChanged.connect(self.atenderDial2) self.pushButton.clicked.connect(self.mideTiempo) pg.setConfigOption('background', 'w') pg.setConfigOption('foreground', 'k') self.textBrowser.setText(str(self.sb.get_state()))
class Main(QMainWindow, ui_main.Ui_Main): def __init__(self, parent=None): QMainWindow.__init__(self) self.setupUi(self) print (pg.__version__) self.sb = SerialDAQ() while not self.sb.connected: msg = QMessageBox.critical(None, "Warning", u"DAQ board not connected.", QMessageBox.Retry | QMessageBox.Abort) if msg == QMessageBox.Retry: self.sb.open() else: sys.exit(1) self.updateTimer = QTimer() self.updateTimer.timeout.connect(self.update) self.pbSalidaDig1.clicked.connect(partial(self.activarDigital, 1)) self.pbSalidaDig2.clicked.connect(partial(self.activarDigital, 2)) self.pbSalidaDig3.clicked.connect(partial(self.activarDigital, 3)) self.pbSalidaDig4.clicked.connect(partial(self.activarDigital, 4)) self.pbActualizarEntDig.clicked.connect(self.actualizarEntDig) self.salidaDigital = 0x00 # Asigna valores iniciales por defecto a los parámetros de cada canal for i in range(NUM_CANALES): str_pendiente = 'pendiente_' + str(i + 1) pendiente = getattr(self, str_pendiente) str_ordenada = 'ordenada_' + str(i + 1) ordenada = getattr(self, str_ordenada) str_nombre = 'nombre_' + str(i + 1) nombre = getattr(self, str_nombre) str_unidad = 'unidad_' + str(i + 1) unidad = getattr(self, str_unidad) pendiente.setText(str(PENDIENTE_DEF)) ordenada.setText(str(0.0)) nombre.setText('Canal ' + str(i + 1)) unidad.setText('Volt') self.sb.config_analog(i + 1, name=nombre.text(), activate=False, calib=(float(ordenada.text()), float(pendiente.text()))) self.sb.activate_analog(1) self.midiendo = False self.guardado = True self.modo_continuo = False self.modo_burst = False self.modo_PWM = False self.vent_grafico = [] self.grafico = [] self.actionMedir.triggered.connect(self.medir) self.actionGuardar.triggered.connect(self.guardar) self.actionSalir.triggered.connect(self.close) self.pbActivatePWM.clicked.connect(self.activarPWM) self.dial.setTracking(True) self.dial_2.setTracking(True) self.dial.valueChanged.connect(self.atenderDial1) self.dial_2.valueChanged.connect(self.atenderDial2) self.pushButton.clicked.connect(self.mideTiempo) pg.setConfigOption('background', 'w') pg.setConfigOption('foreground', 'k') self.textBrowser.setText(str(self.sb.get_state())) def mideTiempo(self, value): self.lcdNumber.display(0) if self.radioButton_4.isChecked(): result = self.sb.read_time(mode=1) else: result = self.sb.read_time(mode=2) self.lcdNumber.display(result) def atenderDial1(self): self.spinBoxPWM1.setValue(self.dial.value()) freq = int(self.cbPWM_freq.currentText()) duty1 = self.spinBoxPWM1.value() duty2 = self.spinBoxPWM2.value() if self.modo_PWM: self.sb.set_PWM(freq, duty1, duty2) def atenderDial2(self): self.spinBoxPWM2.setValue(self.dial_2.value()) freq = int(self.cbPWM_freq.currentText()) duty1 = self.spinBoxPWM1.value() duty2 = self.spinBoxPWM2.value() if self.modo_PWM: self.sb.set_PWM(freq, duty1, duty2) def activarPWM(self): if self.modo_PWM: self.pbActivatePWM.setText("Activar") self.sb.stop() self.modo_PWM = False else: self.pbActivatePWM.setText("Desactivar") self.modo_PWM = True freq = int(self.cbPWM_freq.currentText()) duty1 = self.spinBoxPWM1.value() duty2 = self.spinBoxPWM2.value() print duty1, duty2, type(duty1), type(duty2) self.sb.set_PWM(freq, duty1, duty2) def actualizarEntDig(self): self.cbEntradaDig1.setChecked(self.sb.read_digital(1)) self.cbEntradaDig2.setChecked(self.sb.read_digital(2)) self.cbEntradaDig3.setChecked(self.sb.read_digital(3)) self.cbEntradaDig4.setChecked(self.sb.read_digital(4)) def activarDigital(self, num): temp = self.salidaDigital num = 1 << (4 + (num - 1)) temp = temp & 0xF0 temp = temp ^ num self.salidaDigital = temp | (self.salidaDigital & 0x0F) self.sb.board.write(chr(27) + b'S' + chr(self.salidaDigital)) def guardar(self): fileName = QFileDialog.getSaveFileName(self, "Guardar datos", ".", "*.csv") print(fileName) np.savetxt(fileName, self.sb.channel_data[0][0:self.sb.channel_pointer], fmt='%.3f', delimiter=",") self.guardado = True def medir(self): if not self.midiendo: if not self.guardado: msg = QMessageBox.critical(None, "Advertencia", u"Se perderán los datos actuales", QMessageBox.Ok | QMessageBox.Cancel) if msg == QMessageBox.Cancel: return self.guardado = False self.midiendo = True if self.burstGroupBox.isChecked(): self.modo_burst = True else: self.modo_continuo = True self.vent_grafico = [] self.grafico = [] self.sb.clear_analog() self.num_ventana = 0 self.cur_range = 0 self.frecuencia = self.frecuenciaSpinBox.value() print "Frecuencia deseada =", 1. / self.frecuencia print "Frecuencia deseada =", int(10000. / self.frecuencia) * 0.0001 self.timestamp = 0.0001 * int(10000./self.frecuencia) * np.arange(0, self.sb.bufsize) for i in range(NUM_CANALES): gb = getattr(self, 'groupBox_' + str(i + 1)) nombre = getattr(self, 'nombre_' + str(i + 1)) str_pendiente = 'pendiente_' + str(i + 1) pendiente = getattr(self, str_pendiente) str_ordenada = 'ordenada_' + str(i + 1) ordenada = getattr(self, str_ordenada) self.sb.config_analog(i + 1, name=nombre.text(), activate=gb.isChecked(), calib=(float(ordenada.text()), float(pendiente.text()))) if self.sb.channel_active[i]: print('Canal {0} activo.'.format(str(i + 1),)) self.vent_grafico.append(Plot(self, self.num_ventana)) self.num_ventana += 1 self.grafico.append(self.vent_grafico[i].graphicsView.plot(autoDownsample=False, clipToView=True, antialias=True, pen=pg.mkPen('r', width=1.), symbol='o', symbolSize=0, symbolPen=pg.mkPen('r', width=1), symbolBrush=pg.mkBrush('r'))) title = 'Canal {0}: '.format(str(i + 1)) + \ self.sb.channel_name[i] self.vent_grafico[i].setWindowTitle(title) self.vent_grafico[i].graphicsView.setYRange(0., self.sb.channel_calib[i][1] * 2**ADC_BITS) # self.vent_grafico[i].graphicsView.setXRange(0., TIME_RANGE ) #.setLimits(maxXRange=100, minXRange=50) #self.grafico[i].setDownsampling(auto=True) # self.vent_grafico[i].graphicsView.setXRange(0., 50.) self.vent_grafico[i].show() else: print('Canal {0} inactivo.'.format(str(i + 1), )) self.grafico.append(None) self.vent_grafico.append(None) print(u'Iniciando medición') if self.modo_continuo: self.actionMedir.setIconText('Detener') self.sb.start_continuous(self.frecuencia) self.updateTimer.start(50) #1./self.frecuencia*1000) else: print("Estoy en modo burst") self.actionMedir.setIconText('Midiendo...') print(self.sb.board.inWaiting()) self.sb.start_burst(self.frecuencia) time.sleep(0.5) app.processEvents() time.sleep(0.5) app.processEvents() time.sleep(0.5) app.processEvents() time.sleep(0.5) app.processEvents() time.sleep(0.5) app.processEvents() time.sleep(0.5) #print (self.sb.update_analog()) # self.sb.clear_analog() # delay = 0.100 + BURST_BUFFER_SIZE / 2. / self.frecuencia / self.sb.enabled_channels time.sleep(0.5) app.processEvents() time.sleep(0.5) app.processEvents() # # samples_read = self.sb.update_analog() # # while(samples_read != 0): # samples_read = self.sb.update_analog() # time.sleep(0.010) self.update() app.processEvents() self.sb.stop() print("Salí del modo burst") self.actionMedir.setIconText('Medir') self.midiendo = False self.modo_burst = False else: if self.modo_continuo: self.midiendo = False self.modo_continuo = False print(u'Deteniendo medición') self.actionMedir.setIconText('Medir') self.updateTimer.stop() self.sb.update_analog() self.sb.stop() # self.vent_grafico = [] # def update(self): self.sb.update_analog() new_range = False if (self.sb.channel_pointer / self.frecuencia) / TIME_RANGE > self.cur_range: self.cur_range += 1 new_range = True # print self.cur_range for i in range(NUM_CANALES): if self.sb.channel_active[i]: # if new_range: # self.vent_grafico[i].graphicsView.setXRange((self.cur_range - 1) * TIME_RANGE, self.cur_range * TIME_RANGE ) self.grafico[i].setData( self.timestamp[0:self.sb.channel_pointer], self.sb.channel_data[i][0:self.sb.channel_pointer]) def closeEvent(self, event): if not self.guardado: msg = QMessageBox.critical(None, "Salir", u"Se perderán los datos actuales", QMessageBox.Ok | QMessageBox.Cancel) if msg == QMessageBox.Cancel: event.ignore() return for ventana in self.vent_grafico: if ventana is not None: ventana.destroy() event.accept()
def __init__(self, parent=None): QMainWindow.__init__(self) self.setupUi(self) print (pg.__version__) self.sb = SerialDAQ() #'/dev/pts/6') while not self.sb.connected: msg = QMessageBox.critical(None, "Advertencia", u"La interfaz no está conectada", QMessageBox.Retry | QMessageBox.Abort) if msg == QMessageBox.Retry: self.sb.open() else: sys.exit(1) self.updateTimer = QTimer() self.updateTimer.timeout.connect(self.update) # Asigna valores iniciales por defecto a los parámetros de cada canal for i in range(NUM_CANALES): str_pendiente = 'pendiente_' + str(i + 1) pendiente = getattr(self, str_pendiente) str_ordenada = 'ordenada_' + str(i + 1) ordenada = getattr(self, str_ordenada) str_nombre = 'nombre_' + str(i + 1) nombre = getattr(self, str_nombre) str_unidad = 'unidad_' + str(i + 1) unidad = getattr(self, str_unidad) pendiente.setText(str(PENDIENTE_DEF)) ordenada.setText(str(0.0)) nombre.setText('Canal ' + str(i + 1)) unidad.setText('Volt') self.sb.config_analog(i + 1, name=nombre.text(), activate=False, calib=(float(ordenada.text()), float(pendiente.text()))) self.sb.activate_analog(1) self.midiendo = False self.guardado = True self.vent_grafico = [] self.grafico = [] self.actionMedir.triggered.connect(self.medir) self.actionGuardar.triggered.connect(self.guardar) self.actionSalir.triggered.connect(self.close) pg.setConfigOption('background', 'w') pg.setConfigOption('foreground', 'k')
class Principal(QMainWindow, ui_principal.Ui_Principal): def __init__(self, parent=None): QMainWindow.__init__(self) self.setupUi(self) print (pg.__version__) self.sb = SerialDAQ() #'/dev/pts/6') while not self.sb.connected: msg = QMessageBox.critical(None, "Advertencia", u"La interfaz no está conectada", QMessageBox.Retry | QMessageBox.Abort) if msg == QMessageBox.Retry: self.sb.open() else: sys.exit(1) self.updateTimer = QTimer() self.updateTimer.timeout.connect(self.update) # Asigna valores iniciales por defecto a los parámetros de cada canal for i in range(NUM_CANALES): str_pendiente = 'pendiente_' + str(i + 1) pendiente = getattr(self, str_pendiente) str_ordenada = 'ordenada_' + str(i + 1) ordenada = getattr(self, str_ordenada) str_nombre = 'nombre_' + str(i + 1) nombre = getattr(self, str_nombre) str_unidad = 'unidad_' + str(i + 1) unidad = getattr(self, str_unidad) pendiente.setText(str(PENDIENTE_DEF)) ordenada.setText(str(0.0)) nombre.setText('Canal ' + str(i + 1)) unidad.setText('Volt') self.sb.config_analog(i + 1, name=nombre.text(), activate=False, calib=(float(ordenada.text()), float(pendiente.text()))) self.sb.activate_analog(1) self.midiendo = False self.guardado = True self.vent_grafico = [] self.grafico = [] self.actionMedir.triggered.connect(self.medir) self.actionGuardar.triggered.connect(self.guardar) self.actionSalir.triggered.connect(self.close) pg.setConfigOption('background', 'w') pg.setConfigOption('foreground', 'k') def guardar(self): self.guardado = True def medir(self): if not self.midiendo: if not self.guardado: msg = QMessageBox.critical(None, "Advertencia", u"Se perderán los datos actuales", QMessageBox.Ok | QMessageBox.Cancel) if msg == QMessageBox.Cancel: return self.guardado = False self.midiendo = True self.vent_grafico = [] self.grafico = [] self.sb.clear_analog() print(u'Iniciando medición') self.actionMedir.setIconText('Detener') self.frecuencia = self.frecuenciaSpinBox.value() self.num_ventana = 0 self.cur_range = 0 print "Frecuencia deseada =", 1. / self.frecuencia print "Frecuencia deseada =", int(10000. / self.frecuencia) * 0.0001 self.timestamp = 1.065 * 0.0001 * int(10000./self.frecuencia) * np.arange(0, self.sb.bufsize) for i in range(NUM_CANALES): gb = getattr(self, 'groupBox_' + str(i + 1)) nombre = getattr(self, 'nombre_' + str(i + 1)) str_pendiente = 'pendiente_' + str(i + 1) pendiente = getattr(self, str_pendiente) str_ordenada = 'ordenada_' + str(i + 1) ordenada = getattr(self, str_ordenada) self.sb.config_analog(i + 1, name=nombre.text(), activate=gb.isChecked(), calib=(float(ordenada.text()), float(pendiente.text()))) if self.sb.channel_active[i]: print('Canal {0} activo.'.format(str(i + 1),)) self.vent_grafico.append(Grafico(self, self.num_ventana)) self.num_ventana += 1 self.grafico.append(self.vent_grafico[i].graphicsView.plot(autoDownsample=False, clipToView=True, antialias=True, pen=pg.mkPen('r', width=1.), symbol='o', symbolSize=4, symbolPen=pg.mkPen('r', width=1), symbolBrush=pg.mkBrush('r'))) title = 'Canal {0}: '.format(str(i + 1)) + \ self.sb.channel_name[i] self.vent_grafico[i].setWindowTitle(title) self.vent_grafico[i].graphicsView.setYRange(0., self.sb.channel_calib[i][1] * 2**ADC_BITS) # self.vent_grafico[i].graphicsView.setXRange(0., TIME_RANGE ) #.setLimits(maxXRange=100, minXRange=50) #self.grafico[i].setDownsampling(auto=True) # self.vent_grafico[i].graphicsView.setXRange(0., 50.) self.vent_grafico[i].show() else: print('Canal {0} inactivo.'.format(str(i + 1), )) self.grafico.append(None) self.vent_grafico.append(None) self.sb.start_continuous(self.frecuencia) self.updateTimer.start(50) #1./self.frecuencia*1000) else: self.midiendo = False print(u'Deteniendo medición') self.actionMedir.setIconText('Medir') self.updateTimer.stop() self.sb.update_analog() self.sb.stop() # self.vent_grafico = [] # def update(self): self.sb.update_analog() new_range = False if (self.sb.channel_pointer / self.frecuencia) / TIME_RANGE > self.cur_range: self.cur_range += 1 new_range = True # print self.cur_range for i in range(NUM_CANALES): if self.sb.channel_active[i]: # if new_range: # self.vent_grafico[i].graphicsView.setXRange((self.cur_range - 1) * TIME_RANGE, self.cur_range * TIME_RANGE ) self.grafico[i].setData( self.timestamp[0:self.sb.channel_pointer], self.sb.channel_data[i][0:self.sb.channel_pointer]) def closeEvent(self, event): if not self.guardado: msg = QMessageBox.critical(None, "Salir", u"Se perderán los datos actuales", QMessageBox.Ok | QMessageBox.Cancel) if msg == QMessageBox.Cancel: event.ignore() return for ventana in self.vent_grafico: if ventana is not None: ventana.destroy() event.accept()
def __init__(self, parent=None): QMainWindow.__init__(self) self.setupUi(self) print(pg.__version__) self.sb = SerialDAQ() #'/dev/pts/6') while not self.sb.connected: msg = QMessageBox.critical(None, "Advertencia", u"La interfaz no está conectada", QMessageBox.Retry | QMessageBox.Abort) if msg == QMessageBox.Retry: self.sb.open() else: sys.exit(1) self.updateTimer = QTimer() self.updateTimer.timeout.connect(self.update) # Asigna valores iniciales por defecto a los parámetros de cada canal for i in range(NUM_CANALES): str_pendiente = 'pendiente_' + str(i + 1) pendiente = getattr(self, str_pendiente) str_ordenada = 'ordenada_' + str(i + 1) ordenada = getattr(self, str_ordenada) str_nombre = 'nombre_' + str(i + 1) nombre = getattr(self, str_nombre) str_unidad = 'unidad_' + str(i + 1) unidad = getattr(self, str_unidad) pendiente.setText(str(PENDIENTE_DEF)) ordenada.setText(str(0.0)) nombre.setText('Canal ' + str(i + 1)) unidad.setText('Volt') self.sb.config_analog(i + 1, name=nombre.text(), activate=False, calib=(float(ordenada.text()), float(pendiente.text()))) self.sb.activate_analog(1) self.midiendo = False self.guardado = True self.vent_grafico = [] self.grafico = [] self.actionMedir.triggered.connect(self.medir) self.actionGuardar.triggered.connect(self.guardar) self.actionSalir.triggered.connect(self.close) pg.setConfigOption('background', 'w') pg.setConfigOption('foreground', 'k')
class Principal(QMainWindow, ui_principal.Ui_Principal): def __init__(self, parent=None): QMainWindow.__init__(self) self.setupUi(self) print(pg.__version__) self.sb = SerialDAQ() #'/dev/pts/6') while not self.sb.connected: msg = QMessageBox.critical(None, "Advertencia", u"La interfaz no está conectada", QMessageBox.Retry | QMessageBox.Abort) if msg == QMessageBox.Retry: self.sb.open() else: sys.exit(1) self.updateTimer = QTimer() self.updateTimer.timeout.connect(self.update) # Asigna valores iniciales por defecto a los parámetros de cada canal for i in range(NUM_CANALES): str_pendiente = 'pendiente_' + str(i + 1) pendiente = getattr(self, str_pendiente) str_ordenada = 'ordenada_' + str(i + 1) ordenada = getattr(self, str_ordenada) str_nombre = 'nombre_' + str(i + 1) nombre = getattr(self, str_nombre) str_unidad = 'unidad_' + str(i + 1) unidad = getattr(self, str_unidad) pendiente.setText(str(PENDIENTE_DEF)) ordenada.setText(str(0.0)) nombre.setText('Canal ' + str(i + 1)) unidad.setText('Volt') self.sb.config_analog(i + 1, name=nombre.text(), activate=False, calib=(float(ordenada.text()), float(pendiente.text()))) self.sb.activate_analog(1) self.midiendo = False self.guardado = True self.vent_grafico = [] self.grafico = [] self.actionMedir.triggered.connect(self.medir) self.actionGuardar.triggered.connect(self.guardar) self.actionSalir.triggered.connect(self.close) pg.setConfigOption('background', 'w') pg.setConfigOption('foreground', 'k') def guardar(self): self.guardado = True def medir(self): if not self.midiendo: if not self.guardado: msg = QMessageBox.critical(None, "Advertencia", u"Se perderán los datos actuales", QMessageBox.Ok | QMessageBox.Cancel) if msg == QMessageBox.Cancel: return self.guardado = False self.midiendo = True self.vent_grafico = [] self.grafico = [] self.sb.clear_analog() print(u'Iniciando medición') self.actionMedir.setIconText('Detener') self.frecuencia = self.frecuenciaSpinBox.value() self.num_ventana = 0 self.cur_range = 0 print "Frecuencia deseada =", 1. / self.frecuencia print "Frecuencia deseada =", int( 10000. / self.frecuencia) * 0.0001 self.timestamp = 1.065 * 0.0001 * int( 10000. / self.frecuencia) * np.arange(0, self.sb.bufsize) for i in range(NUM_CANALES): gb = getattr(self, 'groupBox_' + str(i + 1)) nombre = getattr(self, 'nombre_' + str(i + 1)) str_pendiente = 'pendiente_' + str(i + 1) pendiente = getattr(self, str_pendiente) str_ordenada = 'ordenada_' + str(i + 1) ordenada = getattr(self, str_ordenada) self.sb.config_analog(i + 1, name=nombre.text(), activate=gb.isChecked(), calib=(float(ordenada.text()), float(pendiente.text()))) if self.sb.channel_active[i]: print('Canal {0} activo.'.format(str(i + 1), )) self.vent_grafico.append(Grafico(self, self.num_ventana)) self.num_ventana += 1 self.grafico.append(self.vent_grafico[i].graphicsView.plot( autoDownsample=False, clipToView=True, antialias=True, pen=pg.mkPen('r', width=1.), symbol='o', symbolSize=4, symbolPen=pg.mkPen('r', width=1), symbolBrush=pg.mkBrush('r'))) title = 'Canal {0}: '.format(str(i + 1)) + \ self.sb.channel_name[i] self.vent_grafico[i].setWindowTitle(title) self.vent_grafico[i].graphicsView.setYRange( 0., self.sb.channel_calib[i][1] * 2**ADC_BITS) # self.vent_grafico[i].graphicsView.setXRange(0., TIME_RANGE ) #.setLimits(maxXRange=100, minXRange=50) #self.grafico[i].setDownsampling(auto=True) # self.vent_grafico[i].graphicsView.setXRange(0., 50.) self.vent_grafico[i].show() else: print('Canal {0} inactivo.'.format(str(i + 1), )) self.grafico.append(None) self.vent_grafico.append(None) self.sb.start_continuous(self.frecuencia) self.updateTimer.start(50) #1./self.frecuencia*1000) else: self.midiendo = False print(u'Deteniendo medición') self.actionMedir.setIconText('Medir') self.updateTimer.stop() self.sb.update_analog() self.sb.stop() # self.vent_grafico = [] # def update(self): self.sb.update_analog() new_range = False if (self.sb.channel_pointer / self.frecuencia) / TIME_RANGE > self.cur_range: self.cur_range += 1 new_range = True # print self.cur_range for i in range(NUM_CANALES): if self.sb.channel_active[i]: # if new_range: # self.vent_grafico[i].graphicsView.setXRange((self.cur_range - 1) * TIME_RANGE, self.cur_range * TIME_RANGE ) self.grafico[i].setData( self.timestamp[0:self.sb.channel_pointer], self.sb.channel_data[i][0:self.sb.channel_pointer]) def closeEvent(self, event): if not self.guardado: msg = QMessageBox.critical(None, "Salir", u"Se perderán los datos actuales", QMessageBox.Ok | QMessageBox.Cancel) if msg == QMessageBox.Cancel: event.ignore() return for ventana in self.vent_grafico: if ventana is not None: ventana.destroy() event.accept()