def _layout(self): if len(self.labels) > 1: width = 60 vbox = QtGui.QVBoxLayout(self) vbox.setSpacing(6) left, top, right, bottom = vbox.getContentsMargins() vbox.setContentsMargins(left, top // 2, right, bottom // 2) if self.parameter.name: label = QtGui.QLabel(self) label.setText("%s:" % self.parameter.name) vbox.addWidget(label) for index, row in enumerate(self.rows): hbox = QtGui.QHBoxLayout() try: label = QtGui.QLabel(self) label.setText("%s" % self.labels[index]) hbox.addWidget(label) except IndexError: pass for input in row: input.setFixedWidth(width) hbox.addWidget(input) label = QtGui.QLabel(self) label.setText(input._parameter.name) hbox.addWidget(label) hbox.addStretch() vbox.addLayout(hbox) self.setLayout(vbox) self.setFrameShape(QtGui.QFrame.Panel) self.setFrameShadow(QtGui.QFrame.Raised) self.setLineWidth(3) else: width = 60 hbox = QtGui.QHBoxLayout(self) left, top, right, bottom = hbox.getContentsMargins() hbox.setContentsMargins(0, top // 2, 0, bottom // 2) label = QtGui.QLabel(self) label.setText("%s:" % self.parameter.name) hbox.addWidget(label) for input in self.rows[0]: input.setFixedWidth(width) hbox.addWidget(input) label = QtGui.QLabel(self) label.setText(input._parameter.name) hbox.addWidget(label) hbox.addStretch() self.setLayout(hbox)
def _layout(self): vbox = QtGui.QVBoxLayout(self) vbox.setSpacing(6) left, top, right, bottom = vbox.getContentsMargins() vbox.setContentsMargins(left, top // 2, right, bottom // 2) label = QtGui.QLabel(self) label.setText(self.parameter.name + ":") vbox.addWidget(label) vbox.addWidget(self.take_noise) hbox = QtGui.QHBoxLayout() label = QtGui.QLabel(self) label.setText("%s:" % self.integration.parameter.name) hbox.addWidget(label) hbox.addWidget(self.integration) vbox.addLayout(hbox) hbox = QtGui.QHBoxLayout() label = QtGui.QLabel(self) label.setText("%s:" % self.n_int.parameter.name) hbox.addWidget(label) hbox.addWidget(self.n_int) vbox.addLayout(hbox) if self._populate_off_resonance: vbox.addWidget(self.off_resonance) hbox = QtGui.QHBoxLayout() label = QtGui.QLabel(self) label.setText("%s:" % self.offset.parameter.name) hbox.addWidget(label) hbox.addWidget(self.offset) vbox.addLayout(hbox) hbox = QtGui.QHBoxLayout() label = QtGui.QLabel(self) label.setText("%s:" % self.n_off.parameter.name) hbox.addWidget(label) hbox.addWidget(self.n_off) vbox.addLayout(hbox) self.setLayout(vbox) self.setFrameShape(QtGui.QFrame.Panel) self.setFrameShadow(QtGui.QFrame.Raised) self.setLineWidth(3)
def _add_widget(self, name, vbox): indicators = self._procedure.indicator_objects widget = getattr(self, name) hbox = QtGui.QHBoxLayout() if not isinstance(widget, self.NO_LABEL_INPUTS): label = QtGui.QLabel(self) label.setText("%s:" % indicators[name].name) hbox.addWidget(label) hbox.addWidget(widget) vbox.addLayout(hbox)
def _add_widget(self, name, vbox): parameters = self._procedure.parameter_objects() widget = getattr(self, name) hbox = QtGui.QHBoxLayout() if not isinstance(widget, self.NO_LABEL_INPUTS): label = QtGui.QLabel(self) label.setText("%s:" % parameters[name].name) hbox.addWidget(label) hbox.addWidget(widget) vbox.addLayout(hbox) vbox.addStretch(0)
def _layout(self): parameters = self._procedure.parameter_objects() vbox = QtGui.QVBoxLayout(self) vbox.setSpacing(6) directory = getattr(self, self._inputs["directory_inputs"]) font = QtGui.QFont() font.setBold(True) directory.label.setFont(font) vbox.addWidget(directory) grid = QtGui.QGridLayout() for index, (_, parameter) in enumerate(self._inputs["frequency_inputs"]): label = QtGui.QLabel() label.setText(parameters[parameter].name) grid.addWidget(label, 0, index) text_edit = QtGui.QTextEdit() text_edit.sizeHint = lambda: QtCore.QSize(0, 120) grid.addWidget(getattr(self, parameter), 1, index) vbox.addLayout(grid) for inputs in self._inputs["sweep_inputs"]: label = QtGui.QLabel() label.setText(inputs[-1] + ":") font = QtGui.QFont() font.setBold(True) label.setFont(font) vbox.addWidget(label) hbox = QtGui.QHBoxLayout() for name in inputs[1:-1]: if not isinstance(getattr(self, name), self.NO_LABEL_INPUTS): label = QtGui.QLabel(self, width=1) label.setText("%s:" % parameters[name].name) hbox.addWidget(label) input_box = getattr(self, name) hbox.addWidget(input_box) hbox.addStretch() vbox.addLayout(hbox) self.setLayout(vbox) directory_inputs = [self._inputs["directory_inputs"]] frequency_inputs = [ inputs[1] for inputs in self._inputs["frequency_inputs"] ] sweep_inputs = [ item for inputs in self._inputs["sweep_inputs"] for item in inputs[1:-1] ] self._inputs = directory_inputs + frequency_inputs + sweep_inputs
def add_tab(self, name, instrument): vbox = QtGui.QVBoxLayout() for label, method, arguments in instrument.CONTROL: hbox = QtGui.QHBoxLayout() label_widget = QtGui.QLabel(label + ":") hbox.addWidget(label_widget) hbox.addStretch() inputs = [] for argument in arguments: if argument[0] is not float: raise ValueError( "Non-float arguments are not implemented yet.") inputs.append(QtGui.QDoubleSpinBox()) if len(argument) > 1 and argument[1]: inputs[-1].setPrefix(argument[1]) if len(argument) > 2 and argument[2]: inputs[-1].setSuffix(argument[2]) if len(argument) > 3 and (argument[3] or argument[3] == 0): inputs[-1].setDecimals(argument[3]) if len(argument) > 4 and (argument[4] or argument[4] == 0): inputs[-1].setMaximum(argument[4]) if len(argument) > 5 and (argument[5] or argument[5] == 0): inputs[-1].setMinimum(argument[5]) hbox.addWidget(inputs[-1]) def evaluate(inst, func, values): def run(): try: getattr(inst, func)(*[v.value() for v in values]) except Exception as error: logging.exception(error) raise error thread = threading.Thread(target=run) thread.start() write = QtGui.QPushButton() write.setText("Send Command") write.clicked.connect(partial(evaluate, instrument, method, inputs)) hbox.addWidget(write) vbox.addLayout(hbox) vbox.addStretch() tab_widget = QtGui.QWidget() tab_widget.setLayout(vbox) self.tab.addTab(tab_widget, name)
def _layout(self): vbox = QtGui.QVBoxLayout(self) vbox.setSpacing(0) hbox = QtGui.QHBoxLayout() hbox.setSpacing(10) hbox.setContentsMargins(-1, 6, -1, 6) hbox.addWidget(self.show_button) hbox.addWidget(self.hide_button) hbox.addWidget(self.clear_button) hbox.addStretch() hbox.addWidget(self.open_button) vbox.addLayout(hbox) vbox.addSpacing(10) vbox.addWidget(self.browser) self.setLayout(vbox)
def _layout(self): self.main = QtGui.QWidget(self) inputs_dock = QtGui.QWidget(self) inputs_vbox = QtGui.QVBoxLayout(self.main) hbox = QtGui.QHBoxLayout() hbox.setSpacing(10) hbox.setContentsMargins(-1, 6, -1, 6) hbox.addWidget(self.queue_button) hbox.addWidget(self.abort_button) hbox.addWidget(self.stop_button) hbox.addStretch() inputs_vbox.addWidget(self.inputs) inputs_vbox.addLayout(hbox) inputs_vbox.addStretch() inputs_dock.setLayout(inputs_vbox) dock = QtGui.QDockWidget('Input Parameters') dock.setWidget(inputs_dock) dock.setFeatures(QtGui.QDockWidget.NoDockWidgetFeatures) self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, dock) tabs = QtGui.QTabWidget(self.main) tabs.addTab(self.plot_widget, "Results Graph") tabs.addTab(self.log_widget, "Experiment Log") splitter = QtGui.QSplitter(QtCore.Qt.Vertical) splitter.addWidget(tabs) splitter.addWidget(self.browser_widget) self.plot_widget.setMinimumSize(100, 200) vbox = QtGui.QVBoxLayout(self.main) vbox.setSpacing(0) vbox.addWidget(splitter) self.main.setLayout(vbox) self.setCentralWidget(self.main) self.main.show() self.resize(1000, 800)
def __init__(self, parameter, parent=None, **kwargs): self.button = QtGui.QPushButton("Find") self.button.clicked.connect(self.get_file) self.line_edit = QtGui.QLineEdit() self.label = QtGui.QLabel() if qt_min_version(5): super().__init__(parameter=parameter, parent=parent, **kwargs) else: QtGui.QWidget.__init__(self, parent=parent, **kwargs) inputs.Input.__init__(self, parameter) vbox = QtGui.QVBoxLayout(self) vbox.setContentsMargins(0, 0, 0, 0) if parameter.name: self.label.setText(self.parameter.name + ":") vbox.addWidget(self.label) hbox = QtGui.QHBoxLayout() hbox.addWidget(self.button) hbox.addWidget(self.line_edit) vbox.addLayout(hbox) self.setLayout(vbox)
def _layout(self): if self.horizontal: box = QtGui.QHBoxLayout(self) else: box = QtGui.QVBoxLayout(self) box.setSpacing(6) left, top, right, bottom = box.getContentsMargins() box.setContentsMargins(left, top // 2, right, bottom // 2) if self.parameter.name: label = QtGui.QLabel(self) label.setText("%s:" % self.parameter.name) box.addWidget(label) for row in self.rows: if self.horizontal: box.addStretch() box.addWidget(row) self.setLayout(box) self.setFrameShape(QtGui.QFrame.Panel) self.setFrameShadow(QtGui.QFrame.Raised) self.setLineWidth(3)
def _layout(self): width = 60 hbox = QtGui.QHBoxLayout(self) hbox.setContentsMargins(0, 0, 0, 0) hbox.addStretch() hbox.addWidget(self.vary) self.guess.setFixedWidth(width) hbox.addWidget(self.guess) label = QtGui.QLabel(self) label.setText("guess") hbox.addWidget(label) self.min.setFixedWidth(width) hbox.addWidget(self.min) label = QtGui.QLabel(self) label.setText("min") hbox.addWidget(label) self.max.setFixedWidth(width) hbox.addWidget(self.max) label = QtGui.QLabel(self) label.setText("max") hbox.addWidget(label)
def _layout(self): # main window widget self.main = QtGui.QWidget(self) # make the parameters dock widget inputs_dock = QtGui.QWidget(self) inputs_vbox = QtGui.QVBoxLayout() inputs_vbox.addWidget(self.inputs) hbox = QtGui.QHBoxLayout() hbox.setContentsMargins(-1, 6, -1, 6) hbox.addStretch() hbox.addWidget(self.queue_button) hbox.addStretch() hbox.addWidget(self.abort_button) hbox.addStretch() hbox.addWidget(self.abort_all_button) hbox.addStretch() inputs_vbox.addLayout(hbox) inputs_vbox.addStretch() inputs_dock.setLayout(inputs_vbox) # add the dock to the right dock = QtGui.QDockWidget('Parameters') dock.setWidget(inputs_dock) features = dock.features() dock.setFeatures(features & ~QtGui.QDockWidget.DockWidgetClosable) self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock) # make indicators dock widget on the left if self.indicators.inputs or self.persistent_indicators: indicator_dock = QtGui.QWidget(self) indicator_vbox = QtGui.QVBoxLayout() if self.indicators.inputs: indicator_vbox.addWidget(self.indicators) for indicator in self.persistent_indicators: indicator_vbox.addWidget(indicator) indicator_vbox.addStretch() indicator_dock.setLayout(indicator_vbox) indicator_dock_widget = QtGui.QDockWidget('Indicators') indicator_dock_widget.setWidget(indicator_dock) features = indicator_dock_widget.features() indicator_dock_widget.setFeatures( features & ~QtGui.QDockWidget.DockWidgetClosable) self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, indicator_dock_widget) # make the browser dock widget browser_dock = QtGui.QWidget(self) browser_vbox = QtGui.QVBoxLayout() browser_vbox.addWidget(self.browser_widget) browser_dock.setLayout(browser_vbox) # add the dock to the bottom browser_dock_widget = QtGui.QDockWidget('Browser') browser_dock_widget.setWidget(browser_dock) features = browser_dock_widget.features() browser_dock_widget.setFeatures( features & ~QtGui.QDockWidget.DockWidgetClosable) self.addDockWidget(QtCore.Qt.BottomDockWidgetArea, browser_dock_widget) # make the plot tabs tabs = QtGui.QTabWidget(self.main) for index, plot_widget in enumerate(self.plot_widget): tabs.addTab(plot_widget, self.plot_names[index]) tabs.addTab(self.log_widget, "Log") self.plot_widget[0].setMinimumSize(100, 200) # add the tabs as the main window layout vbox = QtGui.QVBoxLayout(self.main) vbox.setSpacing(0) vbox.addWidget(tabs) self.main.setLayout(vbox) # set the central widget and show self.setCentralWidget(self.main) self.main.show() self.resize(1400, 1000)