def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(935, 569) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget) self.verticalLayout.setObjectName("verticalLayout") self.splitter = QtWidgets.QSplitter(self.centralwidget) self.splitter.setOrientation(QtCore.Qt.Horizontal) self.splitter.setObjectName("splitter") self.fileList = DataFileList(self.splitter) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.fileList.sizePolicy().hasHeightForWidth()) self.fileList.setSizePolicy(sizePolicy) self.fileList.setAlternatingRowColors(False) self.fileList.setUniformRowHeights(True) self.fileList.setObjectName("fileList") self.fileContents = DataFileContent(self.splitter) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(2) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.fileContents.sizePolicy().hasHeightForWidth()) self.fileContents.setSizePolicy(sizePolicy) self.fileContents.setContextMenuPolicy(QtCore.Qt.CustomContextMenu) self.fileContents.setUniformRowHeights(True) self.fileContents.setAllColumnsShowFocus(False) self.fileContents.setObjectName("fileContents") self.verticalLayout.addWidget(self.splitter) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 935, 22)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.monitorToolBar = MonitorToolBar(MainWindow) self.monitorToolBar.setObjectName("monitorToolBar") MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.monitorToolBar) self.autoPlotNewAction = QtWidgets.QAction(MainWindow) self.autoPlotNewAction.setCheckable(True) self.autoPlotNewAction.setObjectName("autoPlotNewAction") self.monitorToolBar.addAction(self.autoPlotNewAction) self.retranslateUi(MainWindow) MainWindow.dataFileSelected.connect(self.fileContents.setData) self.fileList.dataFileSelected.connect(MainWindow.processFileSelection) self.fileContents.customContextMenuRequested['QPoint'].connect( self.fileContents.onCustomContextMenuRequested) self.fileContents.plotRequested.connect(MainWindow.plotSelected) self.fileList.itemSelectionChanged.connect( self.fileList.processSelection) self.fileList.newDataFilesFound.connect(MainWindow.onNewDataFilesFound) QtCore.QMetaObject.connectSlotsByName(MainWindow)
def __init__(self, options: FigureOptions, parent: Optional[QtWidgets.QWidget] = None) -> None: """Constructor. :param options: options object. GUI interaction will make changes in-place to this object. :param parent: parent Widget """ super().__init__(parent) self.options = options combineLinePlots = self.addAction("Combine 1D") combineLinePlots.setCheckable(True) combineLinePlots.setChecked(self.options.combineLinePlots) combineLinePlots.triggered.connect( lambda: self._setOption('combineLinePlots', combineLinePlots.isChecked()) ) complexOptions = QtWidgets.QMenu(parent=self) complexGroup = QtWidgets.QActionGroup(complexOptions) complexGroup.setExclusive(True) for k in ComplexRepresentation: a = QtWidgets.QAction(k.label, complexOptions) a.setCheckable(True) complexGroup.addAction(a) complexOptions.addAction(a) a.setChecked(k == self.options.complexRepresentation) complexGroup.triggered.connect( lambda _a: self._setOption('complexRepresentation', ComplexRepresentation.fromLabel(_a.text())) ) complexButton = QtWidgets.QToolButton() complexButton.setToolButtonStyle(QtCore.Qt.ToolButtonTextOnly) complexButton.setText('Complex') complexButton.setPopupMode(QtWidgets.QToolButton.InstantPopup) complexButton.setMenu(complexOptions) self.addWidget(complexButton)
def __init__(self, parent: Optional[QtWidgets.QWidget] = None, dbPath: Optional[str] = None): """Constructor for :class:`QCodesDBInspector`.""" super().__init__(parent) self._plotWindows: Dict[int, WindowDict] = {} self.filepath = dbPath self.dbdf = None self.monitor = QtCore.QTimer() # flag for determining what has been loaded so far. # * None: nothing opened yet. # * -1: empty DS open. # * any value > 0: run ID from the most recent loading. self.latestRunId = None self.setWindowTitle('Plottr | QCoDeS dataset inspectr') ### GUI elements # Main Selection widgets self.dateList = DateList() self._selected_dates: Tuple[str, ...] = () self.runList = RunList() self.runInfo = RunInfo() rightSplitter = QtWidgets.QSplitter(QtCore.Qt.Vertical) rightSplitter.addWidget(self.runList) rightSplitter.addWidget(self.runInfo) rightSplitter.setSizes([400, 200]) splitter = QtWidgets.QSplitter() splitter.addWidget(self.dateList) splitter.addWidget(rightSplitter) splitter.setSizes([100, 500]) self.setCentralWidget(splitter) # status bar self.status = QtWidgets.QStatusBar() self.setStatusBar(self.status) # toolbar self.toolbar = self.addToolBar('Data monitoring') # toolbar item: monitor interval self.monitorInput = MonitorIntervalInput() self.monitorInput.setToolTip('Set to 0 for disabling') self.monitorInput.intervalChanged.connect(self.setMonitorInterval) self.toolbar.addWidget(self.monitorInput) self.toolbar.addSeparator() # toolbar item: auto-launch plotting self.autoLaunchPlots = FormLayoutWrapper([('Auto-plot new', QtWidgets.QCheckBox())]) tt = "If checked, and automatic refresh is running, " tt += " launch plotting window for new datasets automatically." self.autoLaunchPlots.setToolTip(tt) self.toolbar.addWidget(self.autoLaunchPlots) # menu bar menu = self.menuBar() fileMenu = menu.addMenu('&File') # action: load db file loadAction = QtWidgets.QAction('&Load', self) loadAction.setShortcut('Ctrl+L') loadAction.triggered.connect(self.loadDB) fileMenu.addAction(loadAction) # action: updates from the db file refreshAction = QtWidgets.QAction('&Refresh', self) refreshAction.setShortcut('R') refreshAction.triggered.connect(self.refreshDB) fileMenu.addAction(refreshAction) # sizing scaledSize = 640 * rint(self.logicalDpiX() / 96.0) self.resize(scaledSize, scaledSize) ### Thread workers # DB loading. can be slow, so nice to have in a thread. self.loadDBProcess = LoadDBProcess() self.loadDBThread = QtCore.QThread() self.loadDBProcess.moveToThread(self.loadDBThread) self.loadDBProcess.pathSet.connect(self.loadDBThread.start) self.loadDBProcess.dbdfLoaded.connect(self.DBLoaded) self.loadDBProcess.dbdfLoaded.connect(self.loadDBThread.quit) self.loadDBThread.started.connect( self.loadDBProcess.loadDB) # type: ignore[attr-defined] ### connect signals/slots self.dbdfUpdated.connect(self.updateDates) self.dbdfUpdated.connect(self.showDBPath) self.dateList.datesSelected.connect(self.setDateSelection) self.dateList.fileDropped.connect(self.loadFullDB) self.runList.runSelected.connect(self.setRunSelection) self.runList.runActivated.connect(self.plotRun) self._sendInfo.connect(self.runInfo.setInfo) self.monitor.timeout.connect(self.monitorTriggered) if self.filepath is not None: self.loadFullDB(self.filepath)