Exemple #1
0
class WidgetPandas(QWidget):
    def __init__(self, parent=None, df=None):
        super().__init__(parent)
        if df is None:
            df = pd.DataFrame()
        self.tablemodel = PandasDataFrameModel(df=df)
        self.tableview = QTableView()
        self.tableview.setModel(self.tablemodel)
        tableboxlayout = QVBoxLayout()
        self.tableview.setMinimumWidth(500)
        self.tableview.setMinimumHeight(250)
        self.tableview.setWordWrap(False)
        self.tableview.setShowGrid(False)
        tableboxlayout.addWidget(self.tableview)
        self.setLayout(tableboxlayout)

    @Slot(pd.DataFrame)
    def setDataFrame(self, df: pd.DataFrame):
        if df is None:
            df = pd.DataFrame()
        self.tablemodel.set_df(df)

    @Slot()
    def refreshTable(self):
        self.tablemodel.beginResetModel()
        self.tablemodel.endResetModel()
Exemple #2
0
class VernierUpdate(QWidget):
    def __init__(self, parent=None):
        super(VernierUpdate, self).__init__(parent)
        wl_coarse = np.linspace(1480, 1600, 60001)

        self.fig_coarse = FigureWithToolbar(width=7, height=4)
        self.fig_coarse.set_limits(ylim=(-30, 5), auto_x=True, auto_y=False)
        self.fig_coarse.set_labels('Wavelength [nm]', 'Transmission [dB]')
        self.fig_coarse.plot_line(wl_coarse,
                                  np.zeros_like(wl_coarse),
                                  label='Vernier')

        wl_fine = np.linspace(1540, 1541, 201)
        self.fig_fine = FigureWithToolbar(width=7, height=4)
        self.fig_fine.set_limits(ylim=(-1, 0), auto_x=True, auto_y=False)
        self.fig_fine.set_labels('Wavelength [nm]', 'Transmission [dB]')
        self.fig_fine.plot_line(wl_fine, np.zeros_like(wl_fine), label='MRR1')
        self.fig_fine.plot_line(wl_fine, np.zeros_like(wl_fine), label='MRR2')
        self.fig_fine.plot_line(wl_fine,
                                np.zeros_like(wl_fine),
                                label='Vernier')

        self.peaks_model = PandasModel(
            pd.DataFrame({
                'Peak wl [nm]': np.full((5, ), fill_value=np.nan),
                'Peak lvl [dB]': np.full((5, ), fill_value=np.nan)
            }))
        self.peaks_table = QTableView()
        self.peaks_table.setModel(self.peaks_model)
        self.peaks_table.setMinimumWidth(160)

        layout = QHBoxLayout()
        layout.addWidget(self.fig_coarse)
        layout.addWidget(self.fig_fine)
        layout.addWidget(self.peaks_table)
        self.setLayout(layout)

    @Slot(object, object)
    def update_coarse(self, wl, transmission):
        self.fig_coarse.update_in_place((wl, ), (transmission, ))

    @Slot(float)
    def update_fine(self, wl, fine_1, fine_2, fine_vernier):
        # New fine wavelength range
        self.fig_fine.update_in_place((wl, wl, wl),
                                      (fine_1, fine_2, fine_vernier))
        self.fig_fine.update_axes()

    @Slot()
    def update_table(self, df):
        self.peaks_model.set_data(df)
        self.peaks_table.updateGeometry()
Exemple #3
0
class DataOpenDialog(QDialog):
    def __init__(
        self,
        expected_columns,
        obligatory_columns,
        all_columns=None,
        parent: typing.Optional[PySide2.QtWidgets.QWidget] = None,
    ):
        super().__init__(parent)
        self.file = None
        self.allcolumns = all_columns if all_columns else expected_columns
        self.columns = expected_columns
        self.obligatorycolumns = obligatory_columns
        self.setWindowTitle('Open Data File')
        self.filename = QLineEdit()
        self.filename.setReadOnly(True)
        self.filename.setMinimumWidth(150)
        self.loadbutton = QPushButton("Load...")
        self.loadbutton.clicked.connect(self.file_dialog)

        layout_left = QVBoxLayout()
        filebox = QGroupBox('File')
        layoutf = QFormLayout()
        layoutf.addRow('File', self.filename)
        layoutf.addRow('', self.loadbutton)
        filebox.setLayout(layoutf)
        layout_left.addWidget(filebox)
        self.columnsbox = ColumnsGroupBox('Columns order',
                                          expected_columns=expected_columns,
                                          all_columns=all_columns)
        self.columnsbox.columns_changes.connect(self.on_columns_order_changed)
        layout_left.addWidget(self.columnsbox)
        layout_left.addStretch()

        layout_right = QVBoxLayout()
        previewbox = QGroupBox('File 10 lines preview')
        previewboxlayout = QVBoxLayout()
        self.preview = QTextEdit()
        self.preview.setReadOnly(True)
        self.preview.setLineWrapMode(QTextEdit.NoWrap)
        self.preview.setMinimumWidth(500)
        self.preview.setMinimumHeight(170)
        previewboxlayout.addWidget(self.preview)
        previewbox.setLayout(previewboxlayout)
        layout_right.addWidget(previewbox)

        self.tablemodel = PandasDataFrameModel(df=pd.DataFrame())
        self.tableview = QTableView()
        self.tableview.setModel(self.tablemodel)
        tablebox = QGroupBox('Data preview')
        tableboxlayout = QVBoxLayout()
        self.tableview.setMinimumWidth(500)
        self.tableview.setMinimumHeight(250)
        self.tableview.setWordWrap(False)
        self.tableview.setShowGrid(False)
        tableboxlayout.addWidget(self.tableview)
        tablebox.setLayout(tableboxlayout)
        layout_right.addWidget(tablebox)

        layout = QHBoxLayout()
        layout.addLayout(layout_left)
        layout.addLayout(layout_right)

        layoutmain = QVBoxLayout()
        layoutmain.addLayout(layout)

        self.buttonbox = QDialogButtonBox(QDialogButtonBox.Ok
                                          | QDialogButtonBox.Cancel)
        self.buttonbox.accepted.connect(self.accept)
        self.buttonbox.rejected.connect(self.reject)
        layoutmain.addWidget(self.buttonbox)
        self.setLayout(layoutmain)
        self.update_ok()

    @property
    def df(self):
        return self.tablemodel.df

    def file_dialog(self):
        filedialog = QFileDialog(caption='Select Data File')
        filedialog.setFileMode(QFileDialog.ExistingFile)
        if filedialog.exec():
            self.file = filedialog.selectedFiles()[0]
            self.filename.setText(self.file)
            lines = []
            with open(self.file) as fd:
                for _ in range(10):
                    lines.append(fd.readline())
            self.preview.setText(''.join(lines))
            reader = DataFrameReader(self.file)
            self.tablemodel.set_df(reader.df)
            self.tablemodel.set_columns(self.columnsbox.columns)
            self.tableview.resizeRowsToContents()
        self.update_ok()

    @Slot()
    def on_columns_order_changed(self):
        self.tablemodel.set_columns(self.columnsbox.columns)
        self.update_ok()

    def is_ok(self):
        columns = set(self.tablemodel.df.columns)
        for c in self.obligatorycolumns:
            if not isinstance(c, tuple):
                c = (c, )
            c = set(c)
            if c.isdisjoint(columns):
                return False
        return True

    def update_ok(self):
        self.buttonbox.button(QDialogButtonBox.Ok).setEnabled(self.is_ok())