def __init__(self, *args, **kwargs): super(Arboretum, self).__init__(*args, **kwargs) layout = QVBoxLayout() # add some buttons self.load_button = QPushButton('Load...', self) self.config_button = QPushButton('Configure...', self) self.localize_button = QPushButton('Localize', self) self.track_button = QPushButton('Track', self) self.save_button = QPushButton('Save...', self) # checkboxes self.optimize_checkbox = QCheckBox() self.optimize_checkbox.setChecked(True) # self.use_states_checkbox = QCheckBox() # self.use_states_checkbox.setChecked(True) # combo boxes self.tracking_mode_combobox = QComboBox() for mode in BayesianUpdates: self.tracking_mode_combobox.addItem(mode.name.lower()) default_mode = BayesianUpdates.EXACT self.tracking_mode_combobox.setCurrentIndex(default_mode.value) # # sliders self.search_radius_slider = QSlider(Qt.Horizontal) self.search_radius_slider.setFocusPolicy(Qt.NoFocus) self.search_radius_slider.setMinimum(1) self.search_radius_slider.setMaximum(300) self.search_radius_slider.setSingleStep(1) # self.search_radius_slider.setEnabled(False) # dynamic labels self.config_filename_label = QLabel() self.localizations_label = QLabel() self.tracks_label = QLabel() self.status_label = QLabel() self.search_radius_label = QLabel() self.search_radius_label.setAlignment(Qt.AlignRight) # load/save buttons io_panel = QWidget() io_layout = QHBoxLayout() io_layout.addWidget(self.load_button) io_layout.addWidget(self.save_button) io_panel.setLayout(io_layout) io_panel.setMaximumWidth(GUI_MAXIMUM_WIDTH) layout.addWidget(io_panel) # tracking panel tracking_panel = QGroupBox('tracking') tracking_layout = QGridLayout() tracking_layout.addWidget(QLabel('method: '), 0, 0) tracking_layout.addWidget(self.tracking_mode_combobox, 0, 1) tracking_layout.addWidget(self.search_radius_label, 1, 0) tracking_layout.addWidget(self.search_radius_slider, 1, 1) tracking_layout.addWidget(QLabel('optimize: '), 2, 0) tracking_layout.addWidget(self.optimize_checkbox, 2, 1) tracking_layout.addWidget(self.config_button, 3, 0) tracking_layout.addWidget(self.config_filename_label, 3, 1) tracking_layout.addWidget(self.localize_button, 4, 0) tracking_layout.addWidget(self.localizations_label, 4, 1) tracking_layout.addWidget(self.track_button, 5, 0) tracking_layout.addWidget(self.tracks_label, 5, 1) tracking_layout.setColumnMinimumWidth(1, 150) tracking_layout.setSpacing(4) tracking_panel.setMaximumWidth(GUI_MAXIMUM_WIDTH) tracking_panel.setLayout(tracking_layout) layout.addWidget(tracking_panel) # status panel status_panel = QGroupBox('status') status_layout = QHBoxLayout() status_layout.addWidget(self.status_label) status_panel.setMaximumWidth(GUI_MAXIMUM_WIDTH) status_panel.setLayout(status_layout) layout.addWidget(status_panel) # set the layout layout.setAlignment(Qt.AlignTop) layout.setSpacing(4) self.setLayout(layout) self.setMaximumHeight(GUI_MAXIMUM_HEIGHT) self.setMaximumWidth(GUI_MAXIMUM_WIDTH) # callbacks self.load_button.clicked.connect(self.load_data) self.save_button.clicked.connect(self.export_data) self.config_button.clicked.connect(self.load_config) self.tracking_mode_combobox.currentTextChanged.connect( self._on_mode_change) self.search_radius_slider.valueChanged.connect(self._on_radius_change) self._tracker_state = None self._segmentation = None self._localizations = None self._tracks = None self._btrack_cfg = None self._active_layer = None # TODO(arl): this is the working filename for the dataset self.filename = None self._search_radius = None self._on_mode_change() self.search_radius_slider.setValue(100)
def __init__(self, formulationsEditorView: FormulationsEditorView, *args, **kwargs): super().__init__(*args, **kwargs) longOrientLabel = QLabel("Longitudinal orientation:") longOrientCombo = QComboBox() longOrientCombo.addItems( [ LongOrient.TipIntoPage.value, LongOrient.TipOutOfPage.value, ] ) longOrientLabel.setBuddy(longOrientCombo) self.longOrientCombo = longOrientCombo longDirLabel = QLabel("Longitudinal direction:") longDirCombo = QComboBox() longDirCombo.addItems( [ LongDir.IncreasingTowardsTip.value, LongDir.IncreasingTowardsBooster.value, ] ) longDirLabel.setBuddy(longDirCombo) self.longDirCombo = longDirCombo angDirLabel = QLabel("Angular direction:") angDirCombo = QComboBox() angDirCombo.addItems([AngDir.Clockwise.value, AngDir.CounterClockwise.value]) angDirLabel.setBuddy(angDirCombo) self.angDirCombo = angDirCombo notesTextEdit = QPlainTextEdit() self.notesTextEdit = notesTextEdit notesLayout = QHBoxLayout() notesLayout.addWidget(notesTextEdit) notesGroupBox = QGroupBox() notesGroupBox.setTitle("Notes") notesGroupBox.setLayout(notesLayout) notesGroupBox.setMaximumWidth(400) notesGroupBox.setMaximumHeight(200) layout = QGridLayout() layout.setColumnStretch(0, 0) layout.setColumnStretch(1, 1) layout.addWidget(longOrientLabel, 0, 0, Qt.AlignRight) layout.addWidget(longOrientCombo, 0, 1, Qt.AlignLeft) layout.setRowStretch(0, 0) layout.addWidget(longDirLabel, 1, 0, Qt.AlignRight) layout.addWidget(longDirCombo, 1, 1, Qt.AlignLeft) layout.setRowStretch(1, 0) layout.addWidget(angDirLabel, 2, 0, Qt.AlignRight) layout.addWidget(angDirCombo, 2, 1, Qt.AlignLeft) layout.setRowStretch(2, 0) layout.addWidget(formulationsEditorView, 3, 0, 1, 2) layout.setRowStretch(3, 1) layout.addWidget(notesGroupBox, 4, 0, 1, 2) layout.setRowStretch(4, 0) layout.addWidget(QWidget(), 5, 0) layout.setRowStretch(5, 0) parentWidget = QWidget() parentWidget.setLayout(layout) scrollArea = QScrollArea() scrollArea.setWidget(parentWidget) scrollArea.setWidgetResizable(True) parentLayout = QVBoxLayout() parentLayout.addWidget(scrollArea, 1) self.setLayout(parentLayout)