def _buildUI(self): self.setWindowTitle("MOOI: Multi-Objective Optimization Interface") self.resize(840, 480) self.statusBar().setSizeGripEnabled(False) self.statusBar().showMessage("Loading initial data...") # Plot widget self.plot = PlotWidget() self.plot.setMinimumSize(320, 480) self.plot.setAlignment(Qt.AlignCenter) self.plot.setContextMenuPolicy(Qt.ActionsContextMenu) self.setCentralWidget(self.plot) # Function widget self.functionWidget = QListWidget() self.functionWidget.itemSelectionChanged.connect(self.solutionSelected) rightDock = QDockWidget("Functions", self) rightDock.setObjectName("Functions") rightDock.setWidget(self.functionWidget) rightDock.setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable) self.addDockWidget(Qt.RightDockWidgetArea, rightDock) # Control widget self.showSolutionsRadio = QRadioButton("Functions") self.showSolutionsRadio.setChecked(True) self.showSolutionsRadio.toggled.connect(self._showSolution) self.showVariablesRadio = QRadioButton("Variables") radioWidget = QWidget() radioLayout = QHBoxLayout() radioLayout.addWidget(self.showSolutionsRadio) radioLayout.addWidget(self.showVariablesRadio) radioWidget.setLayout(radioLayout) self.generationLabel = QLabel("Run: 1") self.generationSlider = QSlider(Qt.Horizontal) self.generationSlider.setTickPosition(QSlider.TicksBothSides) self.generationSlider.setTracking(True) self.generationSlider.setMinimum(1) self.generationSlider.setMaximum(1) self.generationSlider.setTickInterval(1) self.generationSlider.valueChanged.connect(self._showSolution) self.solutionSelector = QWidget() self.solutionSelector.setLayout(QVBoxLayout()) addSolutionButton = QPushButton("Add") addSolutionButton.clicked.connect(self.addImplementation) removeSolutionButton = QPushButton("Remove unselected") removeSolutionButton.clicked.connect(self.removeResult) solutionSelectorButtons = QWidget() solutionSelectorButtons.setLayout(QHBoxLayout()) solutionSelectorButtons.layout().addWidget(addSolutionButton) solutionSelectorButtons.layout().addWidget(removeSolutionButton) self.solutionSelectorWidget = QWidget() self.solutionSelectorWidget.setLayout(QVBoxLayout()) self.solutionSelectorWidget.layout().addWidget(solutionSelectorButtons) self.solutionSelectorWidget.layout().addWidget(self.solutionSelector) exportButton = QPushButton("Export image") exportButton.clicked.connect(self.exportImage) exportAllButton = QPushButton("Export all images") exportAllButton.clicked.connect(self.exportAllImages) computeMetricsButton = QPushButton("Compute metrics") computeMetricsButton.clicked.connect(self.computeMetricsAsync) refreshButton = QPushButton("Refresh") refreshButton.clicked.connect(self.updateUI) controlLayout = QVBoxLayout() controlLayout.addWidget(radioWidget) controlLayout.addWidget(self.generationLabel) controlLayout.addWidget(self.generationSlider) controlLayout.addWidget(self.solutionSelectorWidget) controlLayout.addStretch() controlLayout.addWidget(computeMetricsButton) controlLayout.addWidget(refreshButton) controlLayout.addWidget(exportButton) controlLayout.addWidget(exportAllButton) controlWidget = QWidget() controlWidget.setLayout(controlLayout) leftDock = QDockWidget("Control", self) leftDock.setObjectName("Control") leftDock.setWidget(controlWidget) leftDock.setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable) self.addDockWidget(Qt.LeftDockWidgetArea, leftDock) # Metric widget self.metrics = MetricsPanel(self.analyzer) bottomDock = QDockWidget("Metrics", self) bottomDock.setObjectName("Metrics") bottomDock.setWidget(self.metrics) bottomDock.setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable) self.addDockWidget(Qt.BottomDockWidgetArea, bottomDock) # Actions exitAction = QAction('&Exit', self) exitAction.setShortcut('Ctrl+Q') exitAction.setStatusTip('Exit application') exitAction.triggered.connect(qApp.quit) copyAction = QAction("&Copy", self) copyAction.setShortcut("Ctrl+C") copyAction.setStatusTip('Copy metrics') copyAction.triggered.connect(self.metrics.copyMetrics) aboutAction = QAction("&About", self) aboutAction.setStatusTip('About MOOI') aboutAction.triggered.connect(self.helpAbout) # Menus menubar = self.menuBar() fileMenu = menubar.addMenu('&File') fileMenu.addAction(copyAction) fileMenu.addAction(aboutAction) fileMenu.addSeparator() fileMenu.addAction(exitAction)