from PyQt5 import QtWidgets from gui.filterView import FilterView from gui.measureModes import MeasureMode, CrossBoxMode, CrossBoxesControls, SpiralBoxMode class MainView(QtWidgets.QWidget): def __init__(self): super(MainView, self).__init__() self.setWindowTitle('Subsampling Selector') self.layout: QtWidgets.QVBoxLayout = QtWidgets.QVBoxLayout() self.setLayout(self.layout) self.modeSelector: QtWidgets.QComboBox = QtWidgets.QComboBox() self.modeSelector.currentTextChanged.connect(self._switch_to_mode) self.measureModes: dict = {} self.activeMode: MeasureMode = None self.activeModeControl: QtWidgets.QGroupBox = QtWidgets.QGroupBox() loadDsetBtn = QtWidgets.QPushButton('Load Dataset') loadDsetBtn.released.connect(self._load_dataset) self.controlGroup = QtWidgets.QGroupBox() self.controlGroupLayout = QtWidgets.QHBoxLayout() self.controlGroup.setLayout(self.controlGroupLayout) self.controlGroupLayout.addWidget(loadDsetBtn) self.controlGroupLayout.addWidget(QtWidgets.QLabel('Select Subsampling Mode:')) self.controlGroupLayout.addWidget(self.modeSelector) self.controlGroupLayout.addWidget(self.activeModeControl) self.layout.addWidget(self.controlGroup) self.filterView = FilterView() self.layout.addWidget(self.filterView) self._add_measure_modes() self._switch_to_default_mode() def _add_measure_modes(self) -> None: self.measureModes['spiralSelection'] = SpiralBoxMode(self.filterView) self.measureModes['crossSelection'] = CrossBoxMode(self.filterView) self.modeSelector.addItem('spiralSelection') self.modeSelector.addItem('crossSelection') def _switch_to_default_mode(self) -> None: modes: list = list(self.measureModes.keys()) self._activate_mode(modes[0]) def _switch_to_mode(self) -> None: newMode: str = self.modeSelector.currentText() self._activate_mode(newMode) def _activate_mode(self, modeName: str) -> None: requestedMode: MeasureMode = self.measureModes[modeName] if requestedMode is not self._activate_mode: self.activeModeControl.setParent(None) self.controlGroupLayout.removeWidget(self.activeModeControl) self.activeMode = requestedMode self.activeModeControl = self.activeMode.get_control_groupBox() self.controlGroupLayout.insertWidget(2, self.activeModeControl) self.activeMode.update_measure_viewItems() def _load_dataset(self) -> None: fname = QtWidgets.QFileDialog.getOpenFileName(self, 'Select .pkl file', filter='pkl file (*.pkl)') if fname[0] != '': self.filterView.load_and_update_from_dataset(fname[0]) self.activeMode.update_measure_viewItems() if __name__ == '__main__': import sys app = QtWidgets.QApplication(sys.argv) subsampling = MainView() subsampling.show() ret = app.exec_()