Ejemplo n.º 1
0
    def init_ui(self):
        vbox = QtGui.QVBoxLayout()
        vbox.setContentsMargins(0, 0, 0, 0)
        self.setLayout(vbox)

        self.plot_widget = pg.PlotWidget()
        self.plot_widget.hideAxis('bottom')
        self.plot_widget.setLabel('left', units='Hz')
        self.plot_curve = self.plot_widget.plot(pen='w')
        self.plot_curve.setData(x=range(self.buffer_length))
        vbox.addWidget(self.plot_widget)

        log_group_box = QtGui.QGroupBox()
        log_group_box.setTitle('Logging')

        gbgrid = QtGui.QGridLayout()
        gbgrid.setAlignment(QtCore.Qt.AlignVCenter)
        log_group_box.setLayout(gbgrid)

        self.log_file_select_widget = SaveFileSelectWidget(description='Save to:', parent=self.parent())
        self.log_file_select_widget.changed.connect(self.update_logging_file_path)
        gbgrid.addWidget(self.log_file_select_widget, 1, 1, 1, 1)

        self.log_check_box = QtGui.QCheckBox('Enable Logging')
        self.log_check_box.stateChanged.connect(self.toggle_logging)
        gbgrid.addWidget(self.log_check_box, 1, 0, 2, 1)

        help_label = QtGui.QLabel('Values are appended to log file, format: #unix timestamp#,#value# (CSV)')
        help_label.setAlignment(QtCore.Qt.AlignCenter)
        help_label.setDisabled(True)
        help_label.setWordWrap(True)
        gbgrid.addWidget(help_label, 2, 1, 1, 1)

        gbgrid.setColumnStretch(1, 2)
        gbgrid.setHorizontalSpacing(30)

        vbox.addWidget(log_group_box)
Ejemplo n.º 2
0
class WLGraph(QtGui.QWidget):
    def __init__(self, buffer_length=100, parent=None):
        super(WLGraph, self).__init__(parent)

        self.buffer_length = buffer_length
        self.rbuffer = deque(maxlen=buffer_length)

        self.init_ui()

        # turn off logging by default
        self.is_logging = False
        self.toggle_logging(0)

        self.worker_thread = QtCore.QThread(self)
        self.worker = WLGraphLoggingWorker()
        self.worker.moveToThread(self.worker_thread)
        self.worker_thread.start()

    #def __del__(self):
        #self.worker_thread.quit()
        #self.worker_thread.wait()

    def init_ui(self):
        vbox = QtGui.QVBoxLayout()
        vbox.setContentsMargins(0, 0, 0, 0)
        self.setLayout(vbox)

        self.plot_widget = pg.PlotWidget()
        self.plot_widget.hideAxis('bottom')
        self.plot_widget.setLabel('left', units='Hz')
        self.plot_curve = self.plot_widget.plot(pen='w')
        self.plot_curve.setData(x=range(self.buffer_length))
        vbox.addWidget(self.plot_widget)

        log_group_box = QtGui.QGroupBox()
        log_group_box.setTitle('Logging')

        gbgrid = QtGui.QGridLayout()
        gbgrid.setAlignment(QtCore.Qt.AlignVCenter)
        log_group_box.setLayout(gbgrid)

        self.log_file_select_widget = SaveFileSelectWidget(description='Save to:', parent=self.parent())
        self.log_file_select_widget.changed.connect(self.update_logging_file_path)
        gbgrid.addWidget(self.log_file_select_widget, 1, 1, 1, 1)

        self.log_check_box = QtGui.QCheckBox('Enable Logging')
        self.log_check_box.stateChanged.connect(self.toggle_logging)
        gbgrid.addWidget(self.log_check_box, 1, 0, 2, 1)

        help_label = QtGui.QLabel('Values are appended to log file, format: #unix timestamp#,#value# (CSV)')
        help_label.setAlignment(QtCore.Qt.AlignCenter)
        help_label.setDisabled(True)
        help_label.setWordWrap(True)
        gbgrid.addWidget(help_label, 2, 1, 1, 1)

        gbgrid.setColumnStretch(1, 2)
        gbgrid.setHorizontalSpacing(30)

        vbox.addWidget(log_group_box)

    @pyqtSlot(str)
    def update_logging_file_path(self, file_path):
        self.worker.logging_file_path = str(file_path)
        print 'logging to: %s' % file_path

    @pyqtSlot(int)
    def toggle_logging(self, state):
        if (state == 2):
            self.is_logging = True
            self.log_file_select_widget.enable()
        else:
            self.is_logging = False
            self.log_file_select_widget.disable()

    @pyqtSlot(float)
    def push_value(self, value):
        if (self.is_logging):
            line = '%f,%f' % (time.time(), value)
            self.worker.logging_line_added.emit(line)

        self.rbuffer.append(value)
        self.plot_curve.setData(y=list(self.rbuffer))