def _setupLEDLayout(self): label_LedPwrLvl = QLabel('Intensity [%]: ', self) hbox_LedPwrLvl = _create_propty_layout(parent=self, prefix=self.scrn_prefix, propty='LEDPwrLvl', propty_type='sprb') label_LedPwrScaleFactor = QLabel('Power Scale Factor: ', self) hbox_LedPwrScaleFactor = _create_propty_layout( parent=self, prefix=self.scrn_prefix, propty='LEDPwrScaleFactor', propty_type='sprb') label_LedThold = QLabel('Voltage Threshold [V]: ', self) hbox_LedThold = _create_propty_layout(parent=self, prefix=self.scrn_prefix, propty='LEDThold', propty_type='sprb') flay_LED = QFormLayout() flay_LED.addItem( QSpacerItem(1, 10, QSzPlcy.Fixed, QSzPlcy.MinimumExpanding)) flay_LED.addRow(label_LedPwrLvl, hbox_LedPwrLvl) flay_LED.addRow(label_LedPwrScaleFactor, hbox_LedPwrScaleFactor) flay_LED.addRow(label_LedThold, hbox_LedThold) flay_LED.addItem( QSpacerItem(1, 10, QSzPlcy.Fixed, QSzPlcy.MinimumExpanding)) flay_LED.setLabelAlignment(Qt.AlignRight) flay_LED.setFormAlignment(Qt.AlignCenter) return flay_LED
def _setupPositionLayout(self): label_AcceptedErr = QLabel('Error Tolerance [mm]: ', self) hbox_AcceptedErr = _create_propty_layout(parent=self, prefix=self.scrn_prefix, propty='AcceptedErr', propty_type='sprb') label_FluorScrnPos = QLabel('Fluorescent Screen Position [mm]: ', self) hbox_FluorScrnPos = _create_propty_layout(parent=self, prefix=self.scrn_prefix, propty='FluorScrnPos', propty_type='sprb', cmd={ 'label': 'Get Position', 'pressValue': 1, 'name': 'GetFluorScrnPos' }) label_CalScrnPos = QLabel('Calibration Screen Position [mm]: ', self) hbox_CalScrnPos = _create_propty_layout(parent=self, prefix=self.scrn_prefix, propty='CalScrnPos', propty_type='sprb', cmd={ 'label': 'Get Position', 'pressValue': 1, 'name': 'GetCalScrnPos' }) label_NoneScrnPos = QLabel('Receded Screen Position [mm]: ', self) hbox_NoneScrnPos = _create_propty_layout(parent=self, prefix=self.scrn_prefix, propty='NoneScrnPos', propty_type='sprb', cmd={ 'label': 'Get Position', 'pressValue': 1, 'name': 'GetNoneScrnPos' }) flay_pos = QFormLayout() flay_pos.addItem( QSpacerItem(1, 10, QSzPlcy.Fixed, QSzPlcy.MinimumExpanding)) flay_pos.addRow(label_AcceptedErr, hbox_AcceptedErr) flay_pos.addRow(label_FluorScrnPos, hbox_FluorScrnPos) flay_pos.addRow(label_CalScrnPos, hbox_CalScrnPos) flay_pos.addRow(label_NoneScrnPos, hbox_NoneScrnPos) flay_pos.addItem( QSpacerItem(1, 10, QSzPlcy.Fixed, QSzPlcy.MinimumExpanding)) flay_pos.setLabelAlignment(Qt.AlignRight) flay_pos.setFormAlignment(Qt.AlignCenter) return flay_pos
def _setupUi(self): self.lb_circtin = PyDMLabel( self, self.prefix+self.chs['TL Sts']['Circ TIn']) self.lb_circtin.showUnits = True self.lb_circtin.setStyleSheet('qproperty-alignment: AlignLeft;') self.lb_circtout = PyDMLabel( self, self.prefix+self.chs['TL Sts']['Circ TOut']) self.lb_circtout.showUnits = True self.lb_circtout.setStyleSheet('qproperty-alignment: AlignLeft;') self.led_circarc = SiriusLedAlert( self, self.prefix+self.chs['TL Sts']['Circ Arc']) if self.section == 'SI': self.led_loadarc = SiriusLedAlert( self, self.prefix+self.chs['TL Sts']['Load Arc']) self.led_circflwrt = SiriusLedAlert( self, self.prefix+self.chs['TL Sts']['Circ FlwRt']) self.led_loadflwrt = SiriusLedAlert( self, self.prefix+self.chs['TL Sts']['Load FlwRt']) self.led_circintlkop = SiriusLedAlert( self, self.prefix+self.chs['TL Sts']['Circ Intlk']) lay = QFormLayout(self) lay.setLabelAlignment(Qt.AlignRight) lay.addRow(QLabel('<h4>Transm. Line - Detailed Status</h4>')) lay.addItem(QSpacerItem(0, 10, QSzPlcy.Ignored, QSzPlcy.Fixed)) lay.addRow('Circulator T In: ', self.lb_circtin) lay.addRow('Circulator T Out: ', self.lb_circtout) lay.addItem(QSpacerItem(0, 10, QSzPlcy.Ignored, QSzPlcy.Fixed)) lay.addRow('Circulator Arc Detector: ', self.led_circarc) if self.section == 'SI': lay.addRow('Load Arc Detector: ', self.led_loadarc) lay.addRow('Circulator Flow: ', self.led_circflwrt) lay.addRow('Load Flow: ', self.led_loadflwrt) lay.addRow('Circulator Intlk: ', self.led_circintlkop) self.setStyleSheet(""" PyDMLabel{ qproperty-alignment: AlignLeft; } QLed{ max-width: 1.29em; } .QLabel{ max-height:2em; qproperty-alignment: AlignRight; }""")
def _setupImageCalibLayout(self): cam_prefix = SiriusPVName(self.scrn_prefix).substitute(dev='ScrnCam') label_ImgScaleFactorX = QLabel('Scale Factor X: ', self) hbox_ImgScaleFactorX = _create_propty_layout(parent=self, prefix=cam_prefix, propty='ScaleFactorX', propty_type='sprb') label_ImgScaleFactorY = QLabel('Scale Factor Y: ', self) hbox_ImgScaleFactorY = _create_propty_layout(parent=self, prefix=cam_prefix, propty='ScaleFactorY', propty_type='sprb') label_ImgCenterOffsetX = QLabel('Center Offset X [pixels]: ', self) hbox_ImgCenterOffsetX = _create_propty_layout(parent=self, prefix=cam_prefix, propty='CenterOffsetX', propty_type='sprb') label_ImgCenterOffsetY = QLabel('Center Offset Y [pixels]: ', self) hbox_ImgCenterOffsetY = _create_propty_layout(parent=self, prefix=cam_prefix, propty='CenterOffsetY', propty_type='sprb') label_ImgThetaOffset = QLabel('Theta Offset [pixels]: ', self) hbox_ImgThetaOffset = _create_propty_layout(parent=self, prefix=cam_prefix, propty='ThetaOffset', propty_type='sprb') flay_Img = QFormLayout() flay_Img.addItem( QSpacerItem(1, 10, QSzPlcy.Fixed, QSzPlcy.MinimumExpanding)) flay_Img.addRow(label_ImgScaleFactorX, hbox_ImgScaleFactorX) flay_Img.addRow(label_ImgScaleFactorY, hbox_ImgScaleFactorY) flay_Img.addRow(label_ImgCenterOffsetX, hbox_ImgCenterOffsetX) flay_Img.addRow(label_ImgCenterOffsetY, hbox_ImgCenterOffsetY) flay_Img.addRow(label_ImgThetaOffset, hbox_ImgThetaOffset) flay_Img.addItem( QSpacerItem(1, 10, QSzPlcy.Fixed, QSzPlcy.MinimumExpanding)) flay_Img.setLabelAlignment(Qt.AlignRight) flay_Img.setFormAlignment(Qt.AlignCenter) return flay_Img
class CustomizationView(QWidget): def __init__(self): QWidget.__init__(self) self._layout = QFormLayout() self.setLayout(self._layout) self._widgets = {} def addRow(self, title, widget): self._layout.addRow(title, widget) def addLineEdit(self, attribute_name, title, tool_tip=None, placeholder=""): self[attribute_name] = ClearableLineEdit(placeholder=placeholder) self.addRow(title, self[attribute_name]) if tool_tip is not None: self[attribute_name].setToolTip(tool_tip) def getter(self): value = str(self[attribute_name].text()) if value == "": value = None return value def setter(self, value): if value is None: value = "" self[attribute_name].setText(str(value)) self.updateProperty(attribute_name, getter, setter) def addCheckBox(self, attribute_name, title, tool_tip=None): self[attribute_name] = QCheckBox() self.addRow(title, self[attribute_name]) if tool_tip is not None: self[attribute_name].setToolTip(tool_tip) def getter(self): return self[attribute_name].isChecked() def setter(self, value): self[attribute_name].setChecked(value) self.updateProperty(attribute_name, getter, setter) def addSpinBox( self, attribute_name, title, tool_tip=None, min_value=1, max_value=10, single_step=1, ): sb = QSpinBox() self[attribute_name] = sb sb.setMaximumHeight(25) sb_layout = QHBoxLayout() sb_layout.addWidget(sb) sb_layout.addStretch() self.addRow(title, sb_layout) if tool_tip is not None: sb.setToolTip(tool_tip) sb.setMinimum(min_value) sb.setMaximum(max_value) sb.setSingleStep(single_step) def getter(self): return self[attribute_name].value() def setter(self, value): self[attribute_name].setValue(value) self.updateProperty(attribute_name, getter, setter) return sb def addStyleChooser(self, attribute_name, title, tool_tip=None, line_style_set=sc.STYLESET_DEFAULT): style_chooser = StyleChooser(line_style_set=line_style_set) self[attribute_name] = style_chooser self.addRow(title, self[attribute_name]) if tool_tip is not None: self[attribute_name].setToolTip(tool_tip) def getter(self): return self[attribute_name].getStyle() def setter(self, style): self[attribute_name].setStyle(style) self.updateProperty(attribute_name, getter, setter) def updateProperty(self, attribute_name, getter, setter): setattr(self.__class__, attribute_name, property(getter, setter)) def setWidgetEnabled(self, attribute_name, enabled): widget = self[attribute_name] widget.setEnabled(enabled) widget.setHidden(enabled) label = self._layout.labelForField(widget) label.setEnabled(enabled) label.setHidden(enabled) def addSpacing(self, pixels=10): self._layout.addItem(QSpacerItem(1, pixels)) def addHeading(self, title): self.addSpacing(10) self._layout.addRow(title, None) self.addSpacing(1) def __getitem__(self, item): """ @rtype: QWidget """ return self._widgets[item] def __setitem__(self, key, value): self._widgets[key] = value def applyCustomization(self, plot_config): """ @type plot_config: PlotConfig """ raise NotImplementedError( f"Class '{self.__class__.__name__}' has not implemented " "the applyCustomization() function!") def revertCustomization(self, plot_config): """ @type plot_config: PlotConfig """ raise NotImplementedError( f"Class '{self.__class__.__name__}' has not implemented " "the revertCustomization() function!")
def _calibrationgridLayout(self): self.checkBox_showgrid = QCheckBox('Show', self) self.checkBox_showgrid.setEnabled(False) self.checkBox_showgrid.setStyleSheet(""" min-width:4em; max-width:4em; min-height:1.29em; max-height:1.29em;""") self.checkBox_showgrid.toggled.connect( self.image_view.showCalibrationGrid) self.pushbutton_savegrid = QPushButton('Save', self) self.pushbutton_savegrid.setEnabled(False) self.pushbutton_savegrid.setStyleSheet(""" min-width:4em; max-width:4em; min-height:1.29em; max-height:1.29em;""") self.pushbutton_savegrid.clicked.connect(self._saveCalibrationGrid) self.pushbutton_loadgrid = QPushButton('Load', self) self.pushbutton_loadgrid.setStyleSheet(""" min-width:4em; max-width:4em; min-height:1.29em; max-height:1.29em;""") self.pushbutton_loadgrid.clicked.connect(self._loadCalibrationGrid) hbox_grid = QHBoxLayout() hbox_grid.addWidget(self.checkBox_showgrid) hbox_grid.addWidget(self.pushbutton_savegrid) hbox_grid.addWidget(self.pushbutton_loadgrid) lb = QLabel('Show levels <') lb.setStyleSheet("min-width:7em;max-width:7em;") self.spinbox_gridfilterfactor = QSpinBoxPlus() self.spinbox_gridfilterfactor.setMaximum(100) self.spinbox_gridfilterfactor.setMinimum(0) self.spinbox_gridfilterfactor.setValue( self.image_view.calibration_grid_filterfactor) self.spinbox_gridfilterfactor.editingFinished.connect( self._setCalibrationGridFilterFactor) self.spinbox_gridfilterfactor.setStyleSheet(""" min-width:4em; max-width:4em;""") hbox_filter = QHBoxLayout() hbox_filter.setSpacing(0) hbox_filter.addWidget(lb) hbox_filter.addWidget(self.spinbox_gridfilterfactor) hbox_filter.addWidget(QLabel(' %')) lb = QLabel('Remove border: ') lb.setStyleSheet("min-width:7em;max-width:7em;") self.spinbox_removeborder = QSpinBoxPlus() self.spinbox_removeborder.setMaximum(512) self.spinbox_removeborder.setMinimum(0) self.spinbox_removeborder.setValue( self.image_view.calibration_grid_removeborder) self.spinbox_removeborder.editingFinished.connect( self._setCalibrationGridBorder2Remove) self.spinbox_removeborder.setStyleSheet(""" min-width:4em; max-width:4em;""") hbox_remove = QHBoxLayout() hbox_remove.setSpacing(0) hbox_remove.addWidget(lb) hbox_remove.addWidget(self.spinbox_removeborder) hbox_remove.addWidget(QLabel(' px')) hbox_EnblLED = _create_propty_layout(parent=self, prefix=self.scrn_prefix, propty='EnblLED', propty_type='enbldisabl', width=4.68) lay = QFormLayout() lay.addItem(QSpacerItem(1, 10, QSzPlcy.Ignored, QSzPlcy.Preferred)) lay.addRow(' Grid: ', hbox_grid) lay.addItem(QSpacerItem(1, 10, QSzPlcy.Ignored, QSzPlcy.Preferred)) lay.addRow(' ', hbox_filter) lay.addRow(' ', hbox_remove) lay.addItem(QSpacerItem(1, 20, QSzPlcy.Ignored, QSzPlcy.Preferred)) lay.addRow(' LED: ', hbox_EnblLED) lay.addItem(QSpacerItem(1, 10, QSzPlcy.Ignored, QSzPlcy.Preferred)) lay.setLabelAlignment(Qt.AlignRight) lay.setFormAlignment(Qt.AlignCenter) return lay
def _setupUi(self): cw = QWidget(self) self.setCentralWidget(cw) lay = QFormLayout(cw) lay.setLabelAlignment(Qt.AlignRight) lay.setFormAlignment(Qt.AlignCenter) # title self.title_label = QLabel('<h3>' + self.title + '<h3>', self, alignment=Qt.AlignCenter) self.title_label.setObjectName('title') pal = self.title_label.palette() pal.setColor(QPalette.Background, self.background) self.title_label.setAutoFillBackground(True) self.title_label.setPalette(pal) lay.addRow(self.title_label) label_enbl = QLabel('Enable: ', self) self.bt_enbl = PyDMStateButton( self, self.dev.substitute(propty='Enbl' + self.mtyp + 'Mark' + self.idx + '-Sel')) self.bt_enbl.shape = 1 self.led_enbl = SiriusLedState( self, self.dev.substitute(propty='Enbl' + self.mtyp + 'Mark' + self.idx + '-Sts')) hbox_enbl = QHBoxLayout() hbox_enbl.addWidget(self.bt_enbl) hbox_enbl.addWidget(self.led_enbl) lay.addRow(label_enbl, hbox_enbl) label_enblautomax = QLabel('Auto Max Peak: ', self) ch_enblautomax = self.dev.substitute(propty='Enbl' + self.mtyp + 'MaxAuto' + self.idx + '-Sel') self.enblAutoMaxChannel = SiriusConnectionSignal(ch_enblautomax) self.enblAutoMaxChannel.new_value_signal[int].connect( self._handle_values_visibility) self.bt_enblautomax = PyDMStateButton(self, ch_enblautomax) self.bt_enblautomax.shape = 1 self.led_enblautomax = SiriusLedState( self, self.dev.substitute(propty='Enbl' + self.mtyp + 'MaxAuto' + self.idx + '-Sts')) hbox_enblautomax = QHBoxLayout() hbox_enblautomax.addWidget(self.bt_enblautomax) hbox_enblautomax.addWidget(self.led_enblautomax) lay.addRow(label_enblautomax, hbox_enblautomax) label_x = QLabel(' X: ', self) self.sb_x = PyDMLineEdit( self, self.dev.substitute(propty=self.mtyp + 'MarkX' + self.idx + '-SP')) self.lb_x = PyDMLabel( self, self.dev.substitute(propty=self.mtyp + 'MarkX' + self.idx + '-RB')) hbox_x = QHBoxLayout() hbox_x.addWidget(self.sb_x) hbox_x.addWidget(self.lb_x) lay.addRow(label_x, hbox_x) label_y = QLabel(' Y: ', self) self.lb_y = PyDMLabel( self, self.dev.substitute(propty=self.mtyp + 'MarkY' + self.idx + '-Mon')) hbox_y = QHBoxLayout() hbox_y.addWidget(self.lb_y) if self.mtyp == 'D': self.lb_dynamicY = PyDMLabel( self, self.dev.substitute(propty='DynamicDX' + self.idx + '-Mon')) self.lb_dynamicY.setVisible(False) hbox_y.addWidget(self.lb_dynamicY) lay.addRow(label_y, hbox_y) self.pb_max = PyDMPushButton( parent=self, label='Mark Max Peak', pressValue=1, init_channel=self.dev.substitute(propty=self.mtyp + 'MarkMax' + self.idx + '-Cmd')) self.pb_maxnext = PyDMPushButton( parent=self, label='Mark Max Next', pressValue=1, init_channel=self.dev.substitute(propty=self.mtyp + 'MarkMaxNext' + self.idx + '-Cmd')) self.pb_maxright = PyDMPushButton( parent=self, label='Mark Max Right', pressValue=1, init_channel=self.dev.substitute( propty=self.mtyp + 'MarkMaxRight' + self.idx + '-Cmd')) self.pb_maxleft = PyDMPushButton( parent=self, label='Mark Max Left', pressValue=1, init_channel=self.dev.substitute(propty=self.mtyp + 'MarkMaxLeft' + self.idx + '-Cmd')) vbox_cmd = QVBoxLayout() vbox_cmd.addWidget(self.pb_max) vbox_cmd.addWidget(self.pb_maxnext) vbox_cmd.addWidget(self.pb_maxright) vbox_cmd.addWidget(self.pb_maxleft) lay.addItem(QSpacerItem(1, 6, QSzPlcy.Ignored, QSzPlcy.Fixed)) lay.addRow(vbox_cmd) if self.mtyp == '' and self.idx == '1': lay.addItem(QSpacerItem(1, 6, QSzPlcy.Ignored, QSzPlcy.Fixed)) label_enblautomin = QLabel('Enable Auto Min: ', self) self.bt_enblautomin = PyDMStateButton( self, self.dev.substitute(propty='EnblMinAuto-Sel')) self.bt_enblautomin.shape = 1 self.led_enblautomin = SiriusLedState( self, self.dev.substitute(propty='EnblMinAuto-Sts')) hbox_enblautomin = QHBoxLayout() hbox_enblautomin.addWidget(self.bt_enblautomin) hbox_enblautomin.addWidget(self.led_enblautomin) lay.addRow(label_enblautomin, hbox_enblautomin) label_enbllimit = QLabel('Enable Mark Limit: ', self) self.bt_enbllimit = PyDMStateButton( self, self.dev.substitute(propty='EnblMarkLimit-Sel')) self.bt_enbllimit.shape = 1 self.led_enbllimit = SiriusLedState( self, self.dev.substitute(propty='EnblMarkLimit-Sts')) hbox_enbllimit = QHBoxLayout() hbox_enbllimit.addWidget(self.bt_enbllimit) hbox_enbllimit.addWidget(self.led_enbllimit) lay.addRow(label_enbllimit, hbox_enbllimit) label_limright = QLabel('Mark Limit Right: ', self) self.sb_limright = PyDMLineEdit( self, self.dev.substitute(propty='MarkLimitRight-SP')) self.lb_limright = PyDMLabel( self, self.dev.substitute(propty='MarkLimitRight-RB')) hbox_limright = QHBoxLayout() hbox_limright.addWidget(self.sb_limright) hbox_limright.addWidget(self.lb_limright) lay.addRow(label_limright, hbox_limright) label_limleft = QLabel('Mark Limit Left: ', self) self.sb_limleft = PyDMLineEdit( self, self.dev.substitute(propty='MarkLimitLeft-SP')) self.lb_limleft = PyDMLabel( self, self.dev.substitute(propty='MarkLimitLeft-RB')) hbox_limleft = QHBoxLayout() hbox_limleft.addWidget(self.sb_limleft) hbox_limleft.addWidget(self.lb_limleft) lay.addRow(label_limleft, hbox_limleft) self.setStyleSheet(""" QLed{ min-width:1.29em; max-width:1.29em; } #title { min-height:1.29em; max-height:1.29em; qproperty-alignment: "AlignVCenter | AlignHCenter"; } PyDMLabel, PyDMSpinbox, PyDMEnumComboBox, PyDMStateButton{ min-width:6em; max-width:6em; }""")
def _measLayout(self): # Acquisition lbl_acq = QLabel('Acquisition', self) self.bt_acq = PyDMStateButton( self, self.device.substitute(propty='SpecAnaGetSpec-Sel')) self.bt_acq.shape = 1 self.led_acq = SiriusLedState( self, self.device.substitute(propty='SpecAnaGetSpec-Sts')) hbox_acq = QHBoxLayout() hbox_acq.addWidget(self.bt_acq) hbox_acq.addWidget(self.led_acq) # Excitation lbl_drive = QLabel('Excitation', self) self.bt_drive = PyDMStateButton( self, self.device.substitute(propty='Enbl-Sel')) self.bt_drive.shape = 1 value = 0b111 if self.section == 'BO' else 1 self.led_drive = PyDMLedMultiChannel( parent=self, channels2values={self.device.substitute(propty='Enbl-Sts'): value}) self.led_drive.setOffColor(PyDMLed.DarkGreen) hbox_drive = QHBoxLayout() hbox_drive.addWidget(self.bt_drive) hbox_drive.addWidget(self.led_drive) # Excitation Status Detailed gbox_enblsts = QGridLayout() lbl_enblsts = QLabel('Excitation\nEnable Status\nDetailed', self, alignment=Qt.AlignVCenter | Qt.AlignRight) if self.section == 'BO': # # Carrier Generator self.led_carrier = SiriusLedState( self, self.device.substitute(propty='EnblCarrierGen-Sts')) gbox_enblsts.addWidget(self.led_carrier, 0, 0) gbox_enblsts.addWidget(QLabel('Carrier Generator'), 0, 1) # # Noise Generator self.led_noise = SiriusLedState( self, self.device.substitute(propty='EnblNoiseGen-Sts')) gbox_enblsts.addWidget(self.led_noise, 1, 0) gbox_enblsts.addWidget(QLabel('Noise Generator'), 1, 1) else: # # Noise Generator self.led_trkgen = SiriusLedState( self, self.device.substitute(propty='SpecAnaTrkGen-Sts')) gbox_enblsts.addWidget(self.led_trkgen, 1, 0) gbox_enblsts.addWidget(QLabel('Tracking Generator'), 1, 1) # # Amplifier self.led_amp = SiriusLedState( self, self.device.substitute(propty='EnblAmp-Sts')) gbox_enblsts.addWidget(self.led_amp, 2, 0) gbox_enblsts.addWidget(QLabel('Amplifier'), 2, 1) if self.section == 'BO': # Frame Count lbl_acqcnt = QLabel('Frame Count', self) dev = self.device.substitute(dev='TuneProc') self.lb_acqcnt = PyDMLabel(self, dev.substitute(propty='FrameCount-Mon')) self.lb_acqcnt.setAlignment(Qt.AlignCenter) self.led_acqcnt = PyDMLedMultiChannel(parent=self) self.trigNrPulseChannel = SiriusConnectionSignal( self.trigger.substitute(prefix=self.prefix, propty='NrPulses-RB')) self.trigNrPulseChannel.new_value_signal[int].connect( self._updateNrAcq) hbox_acqcnt = QHBoxLayout() hbox_acqcnt.addWidget(self.lb_acqcnt) hbox_acqcnt.addWidget(self.led_acqcnt) # Nr. Samples p/ spec lbl_nrsmp = QLabel('Nr. Samples p/ Spec.', self) self.lb_nrsmp = PyDMLabel(parent=self, init_channel=self.device.substitute( dev='TuneProc', propty_name='SwePts', propty_suffix='RB')) if self.section == 'SI': # Acquisition Time lbl_acqtime = QLabel('Acq. Time', self) self.cb_acqtime = PyDMEnumComboBox( parent=self, init_channel=self.device.substitute(dev='TuneProc', propty_name='Trace', propty_suffix='Mon', field='SCAN')) # Sweep time lbl_swetime = QLabel('Sweep Time [ms]', self) self.lb_swetime = PyDMLabel(parent=self, init_channel=self.device.substitute( dev='TuneProc', propty_name='SweTime', propty_suffix='Mon')) # Span lbl_span = QLabel('Span [kHz]', self) self.le_span = PyDMLineEdit(self, self.device.substitute(propty='Span-SP')) self.le_span.precisionFromPV = True self.lb_span = PyDMLabel(self, self.device.substitute(propty='Span-RB')) hbox_span = QHBoxLayout() hbox_span.addWidget(self.le_span) hbox_span.addWidget(self.lb_span) # RBW lbl_rbw = QLabel('RBW', self) if self.section == 'BO': self.cb_rbw = PyDMEnumComboBox( self, self.device.substitute(propty='SpecAnaRBW-Sel')) else: items = [ '1 Hz', '2 Hz', '3 Hz', '5 Hz', '10 Hz', '20 Hz', '30 Hz', '50 Hz', '100 Hz', '200 Hz', '300 Hz', '500 Hz', '1 kHz', '2 kHz', '3 kHz', '5 kHz', '6.25 kHz', '10 kHz', '20 kHz', '30 kHz', '50 kHz', '100 kHz', '200 kHz', '300 kHz', '500 kHz', '1 MHz', '2 MHz', '3 MHz', '5 MHz', '10 MHz' ] self.cb_rbw = SiriusStringComboBox( self, self.device.substitute(propty='SpecAnaRBW-Sel'), items=items) self.lb_rbw = PyDMLabel( self, self.device.substitute(propty='SpecAnaRBW-Sts')) hbox_rbw = QHBoxLayout() hbox_rbw.addWidget(self.cb_rbw) hbox_rbw.addWidget(self.lb_rbw) # Harmonic lbl_h = QLabel('Harmonic (n)', self) self.sb_h = PyDMSpinbox(self, self.device.substitute(propty='RevN-SP')) self.sb_h.showStepExponent = False self.sb_h.precisionFromPV = True self.lb_h = PyDMLabel(self, self.device.substitute(propty='RevN-RB')) hbox_h = QHBoxLayout() hbox_h.addWidget(self.sb_h) hbox_h.addWidget(self.lb_h) # Harmonic Frequency lbl_Fh = QLabel('Harm. Freq. [kHz]', self) self.lb_Fh = PyDMLabel(parent=self) self.lb_Fh.setToolTip('Frf/(h*n)') self.lb_Fh.channel = self.device.substitute(propty='FreqRevN-Mon') # Frequency Offset lbl_foff = QLabel('Frequency Offset [kHz]', self) self.sb_foff = PyDMSpinbox(self, self.device.substitute(propty='FreqOff-SP')) self.sb_foff.showStepExponent = False self.sb_foff.precisionFromPV = True self.lb_foff = PyDMLabel(self, self.device.substitute(propty='FreqOff-RB')) hbox_foff = QHBoxLayout() hbox_foff.addWidget(self.sb_foff) hbox_foff.addWidget(self.lb_foff) # Center Frequency lbl_Fc = QLabel('Center Frequency [MHz]', self) self.le_Fc = PyDMLineEdit( self, self.device.substitute(propty='CenterFreq-SP')) self.le_Fc.precisionFromPV = True self.lb_Fc = PyDMLabel(self, self.device.substitute(propty='CenterFreq-RB')) hbox_Fc = QHBoxLayout() hbox_Fc.addWidget(self.le_Fc) hbox_Fc.addWidget(self.lb_Fc) # Lock Center Freq. lbl_autoFc = QLabel('Lock Center Frequency ', self) self.bt_autoFc = PyDMStateButton( self, self.device.substitute(propty='CenterFreqAuto-Sel')) self.bt_autoFc.shape = 1 self.led_autoFc = SiriusLedState( self, self.device.substitute(propty='CenterFreqAuto-Sts')) hbox_autoFc = QHBoxLayout() hbox_autoFc.addWidget(self.bt_autoFc) hbox_autoFc.addWidget(self.led_autoFc) # Amplifier Gain lbl_drivegain = QLabel('Amplifier Gain [dB]', self) self.sb_drivegain = PyDMSpinbox( self, self.device.substitute(propty='AmpGain-SP')) self.sb_drivegain.showStepExponent = False self.sb_drivegain.precisionFromPV = True self.lb_drivegain = PyDMLabel( self, self.device.substitute(propty='AmpGain-RB')) hbox_drivegain = QHBoxLayout() hbox_drivegain.addWidget(self.sb_drivegain) hbox_drivegain.addWidget(self.lb_drivegain) if self.section == 'BO': # Auto Configure Excitation lbl_driveauto = QLabel('Auto Config. Excit.', self) self.bt_driveauto = PyDMStateButton( self, self.device.substitute(propty='DriveAuto-Sel')) self.bt_driveauto.shape = 1 self.led_driveauto = SiriusLedState( self, self.device.substitute(propty='DriveAuto-Sts')) hbox_driveauto = QHBoxLayout() hbox_driveauto.addWidget(self.bt_driveauto) hbox_driveauto.addWidget(self.led_driveauto) # Noise Amplitude lbl_noiseamp = QLabel('Noise Amplitude [V]', self) self.sb_noiseamp = PyDMSpinbox( self, self.device.substitute(propty='NoiseAmpl-SP')) self.sb_noiseamp.showStepExponent = False self.sb_noiseamp.precisionFromPV = True self.lb_noiseamp = PyDMLabel( self, self.device.substitute(propty='NoiseAmpl-RB')) hbox_noiseamp = QHBoxLayout() hbox_noiseamp.addWidget(self.sb_noiseamp) hbox_noiseamp.addWidget(self.lb_noiseamp) else: # Noise Amplitude lbl_trkgenlvl = QLabel('Trk. Gen. Power [dBm]', self) self.sb_trkgenlvl = PyDMLineEdit( self, self.device.substitute(propty='SpecAnaTrkGenLvl-SP')) self.lb_trkgenlvl = PyDMLabel( self, self.device.substitute(propty='SpecAnaTrkGenLvl-RB')) hbox_trkgenlvl = QHBoxLayout() hbox_trkgenlvl.addWidget(self.sb_trkgenlvl) hbox_trkgenlvl.addWidget(self.lb_trkgenlvl) # Spectrum Acquisition lbl_getspec = QLabel('Spectrum Acq.', self) self.cb_getspec = PyDMStateButton( parent=self, init_channel=self.device.substitute(dev='TuneProc', propty_name='GetSpectrum', propty_suffix='Sel')) self.cb_getspec.shape = 1 self.lb_getspec = PyDMLed(parent=self, init_channel=self.device.substitute( dev='TuneProc', propty_name='GetSpectrum', propty_suffix='Sts')) hbox_getspec = QHBoxLayout() hbox_getspec.addWidget(self.cb_getspec) hbox_getspec.addWidget(self.lb_getspec) lay = QFormLayout() lay.setLabelAlignment(Qt.AlignRight) lay.setFormAlignment(Qt.AlignCenter) lay.addRow(lbl_acq, hbox_acq) lay.addItem(QSpacerItem(1, 6, QSzPlcy.Ignored, QSzPlcy.Fixed)) lay.addRow(lbl_drive, hbox_drive) lay.addRow(lbl_enblsts, gbox_enblsts) if self.section == 'BO': lay.addItem(QSpacerItem(1, 6, QSzPlcy.Ignored, QSzPlcy.Fixed)) lay.addRow(lbl_acqcnt, hbox_acqcnt) lay.addItem(QSpacerItem(1, 6, QSzPlcy.Ignored, QSzPlcy.Fixed)) lay.addRow(lbl_nrsmp, self.lb_nrsmp) if self.section == 'SI': lay.addRow(lbl_acqtime, self.cb_acqtime) lay.addRow(lbl_swetime, self.lb_swetime) lay.addRow(lbl_span, hbox_span) lay.addRow(lbl_rbw, hbox_rbw) lay.addItem(QSpacerItem(1, 6, QSzPlcy.Ignored, QSzPlcy.Fixed)) lay.addRow(lbl_h, hbox_h) lay.addRow(lbl_Fh, self.lb_Fh) lay.addRow(lbl_foff, hbox_foff) lay.addRow(lbl_Fc, hbox_Fc) lay.addRow(lbl_autoFc, hbox_autoFc) lay.addItem(QSpacerItem(1, 6, QSzPlcy.Ignored, QSzPlcy.Fixed)) lay.addRow(lbl_drivegain, hbox_drivegain) if self.section == 'BO': lay.addRow(lbl_driveauto, hbox_driveauto) lay.addRow(lbl_noiseamp, hbox_noiseamp) else: lay.addRow(lbl_trkgenlvl, hbox_trkgenlvl) lay.addItem(QSpacerItem(1, 6, QSzPlcy.Ignored, QSzPlcy.Fixed)) lay.addRow(lbl_getspec, hbox_getspec) return lay
def _setupGeneralSettingsWidget(self): gbox_generalsettings = QGroupBox('General Measurement Settings', self) l_enbl = QLabel('Enable:', self) self.pydmstatebutton_Enbl = PyDMStateButton( self, self.dcct_prefix.substitute(propty='Enbl-Sel')) self.pydmstatebutton_Enbl.shape = 1 self.led_Enbl = SiriusLedState( self, self.dcct_prefix.substitute(propty='Enbl-Sts')) hlay_enbl = QHBoxLayout() hlay_enbl.addWidget(self.pydmstatebutton_Enbl) hlay_enbl.addWidget(self.led_Enbl) l_meastrig = QLabel('Trigger Source: ', self) self.pydmenumcombobox_MeasTrg = PyDMEnumComboBox( self, self.dcct_prefix.substitute(propty='MeasTrg-Sel')) self.pydmlabel_MeasTrg = PyDMLabel( self, self.dcct_prefix.substitute(propty='MeasTrg-Sts')) hlay_meastrig = QHBoxLayout() hlay_meastrig.addWidget(self.pydmenumcombobox_MeasTrg) hlay_meastrig.addWidget(self.pydmlabel_MeasTrg) l_trigmiss = QLabel('Trigger Is Missing?', self) self.led_TrgMiss = SiriusLedAlert( self, self.dcct_prefix.substitute(propty='TrgIsMissing-Mon')) hlay_trigmiss = QHBoxLayout() hlay_trigmiss.addWidget(self.led_TrgMiss) hlay_trigmiss.setAlignment(Qt.AlignLeft) l_range = QLabel('Range: ', self) self.pydmenumcombobox_Range = PyDMEnumComboBox( self, self.dcct_prefix.substitute(propty='Range-Sel')) self.pydmlabel_Range = PyDMLabel( self, self.dcct_prefix.substitute(propty='Range-Sts')) hlay_range = QHBoxLayout() hlay_range.addWidget(self.pydmenumcombobox_Range) hlay_range.addWidget(self.pydmlabel_Range) l_lowlimenbl = QLabel('Low Beam Current Detection: ', self) self.pydmstatebutton_LowLimEnbl = PyDMStateButton( self, self.dcct_prefix.substitute(propty='LowLimEnbl-Sel')) self.pydmstatebutton_LowLimEnbl.shape = 1 self.pydmlabel_LowLimEnbl = PyDMLabel( self, self.dcct_prefix.substitute(propty='LowLimEnbl-Sts')) hlay_lowlimenbl = QHBoxLayout() hlay_lowlimenbl.addWidget(self.pydmstatebutton_LowLimEnbl) hlay_lowlimenbl.addWidget(self.pydmlabel_LowLimEnbl) l_currthold = QLabel('Current Threshold [mA]: ', self) self.pydmspinbox_CurrThold = PyDMSpinbox( self, self.dcct_prefix.substitute(propty='CurrThold-SP')) self.pydmspinbox_CurrThold.showStepExponent = False self.pydmlabel_CurrThold = PyDMLabel( self, self.dcct_prefix.substitute(propty='CurrThold-RB')) hlay_currthold = QHBoxLayout() hlay_currthold.addWidget(self.pydmspinbox_CurrThold) hlay_currthold.addWidget(self.pydmlabel_CurrThold) l_hfreject = QLabel('High Frequency Rejection: ', self) self.pydmstatebutton_HFReject = PyDMStateButton( self, self.dcct_prefix.substitute(propty='HFReject-Sel')) self.pydmstatebutton_HFReject.shape = 1 self.pydmlabel_HFReject = PyDMLabel( self, self.dcct_prefix.substitute(propty='HFReject-Sts')) hlay_hfreject = QHBoxLayout() hlay_hfreject.addWidget(self.pydmstatebutton_HFReject) hlay_hfreject.addWidget(self.pydmlabel_HFReject) l_measmode = QLabel('Mode: ', self) self.pydmenumcombobox_MeasMode = PyDMEnumComboBox( self, self.dcct_prefix.substitute(propty='MeasMode-Sel')) self.pydmlabel_MeasMode = PyDMLabel( self, self.dcct_prefix.substitute(propty='MeasMode-Sts')) hlay_measmode = QHBoxLayout() hlay_measmode.addWidget(self.pydmenumcombobox_MeasMode) hlay_measmode.addWidget(self.pydmlabel_MeasMode) flay_generalsettings = QFormLayout() flay_generalsettings.setLabelAlignment(Qt.AlignRight) flay_generalsettings.setFormAlignment(Qt.AlignCenter) flay_generalsettings.addRow(l_enbl, hlay_enbl) flay_generalsettings.addRow(l_meastrig, hlay_meastrig) flay_generalsettings.addRow(l_trigmiss, hlay_trigmiss) flay_generalsettings.addRow(l_range, hlay_range) flay_generalsettings.addItem( QSpacerItem(1, 10, QSzPly.Ignored, QSzPly.Preferred)) flay_generalsettings.addRow(l_lowlimenbl, hlay_lowlimenbl) flay_generalsettings.addRow(l_currthold, hlay_currthold) flay_generalsettings.addRow(l_hfreject, hlay_hfreject) flay_generalsettings.addItem( QSpacerItem(1, 10, QSzPly.Ignored, QSzPly.Preferred)) flay_generalsettings.addRow(l_measmode, hlay_measmode) gbox_generalsettings.setLayout(flay_generalsettings) return gbox_generalsettings
class ConfigurePresentationWindow(QWidget): def __init__(self, parent): super().__init__() self.parent = parent # set title self.setWindowTitle("Configure Presentation") # set variables self.setupVariables() # setup Hymn Lyrics from glob import glob from pathlib import Path self.books = sorted([ Path(filename).stem for filename in glob(r"./marvelData/books/Hymn Lyrics*.book") ]) if len(self.books) > 0: self.setMinimumHeight(550) # setup interface self.setupUI() def setupVariables(self): pass def setupUI(self): from functools import partial from qtpy.QtCore import Qt from qtpy.QtWidgets import QHBoxLayout, QFormLayout, QSlider, QPushButton, QPlainTextEdit, QCheckBox, QComboBox from qtpy.QtWidgets import QRadioButton, QWidget, QVBoxLayout, QListView, QSpacerItem, QSizePolicy layout = QHBoxLayout() layout1 = QFormLayout() self.fontsizeslider = QSlider(Qt.Horizontal) self.fontsizeslider.setMinimum(1) self.fontsizeslider.setMaximum(12) self.fontsizeslider.setTickInterval(2) self.fontsizeslider.setSingleStep(2) self.fontsizeslider.setValue(config.presentationFontSize / 0.5) self.fontsizeslider.setToolTip(str(config.presentationFontSize)) self.fontsizeslider.valueChanged.connect( self.presentationFontSizeChanged) layout1.addRow("Font Size", self.fontsizeslider) self.changecolorbutton = QPushButton() buttonStyle = "QPushButton {0}background-color: {2}; color: {3};{1}".format( "{", "}", config.presentationColorOnDarkTheme if config.theme == "dark" else config.presentationColorOnLightTheme, "white" if config.theme == "dark" else "black") self.changecolorbutton.setStyleSheet(buttonStyle) self.changecolorbutton.setToolTip("Change Color") self.changecolorbutton.clicked.connect(self.changeColor) layout1.addRow("Font Color", self.changecolorbutton) self.marginslider = QSlider(Qt.Horizontal) self.marginslider.setMinimum(0) self.marginslider.setMaximum(200) self.marginslider.setTickInterval(50) self.marginslider.setSingleStep(50) self.marginslider.setValue(config.presentationMargin) self.marginslider.setToolTip(str(config.presentationMargin)) self.marginslider.valueChanged.connect(self.presentationMarginChanged) layout1.addRow("Margin", self.marginslider) self.verticalpositionslider = QSlider(Qt.Horizontal) self.verticalpositionslider.setMinimum(10) self.verticalpositionslider.setMaximum(90) self.verticalpositionslider.setTickInterval(10) self.verticalpositionslider.setSingleStep(10) self.verticalpositionslider.setValue( config.presentationVerticalPosition) self.verticalpositionslider.setToolTip( str(config.presentationVerticalPosition)) self.verticalpositionslider.valueChanged.connect( self.presentationVerticalPositionChanged) layout1.addRow("Vertical Position", self.verticalpositionslider) self.horizontalpositionslider = QSlider(Qt.Horizontal) self.horizontalpositionslider.setMinimum(10) self.horizontalpositionslider.setMaximum(90) self.horizontalpositionslider.setTickInterval(10) self.horizontalpositionslider.setSingleStep(10) self.horizontalpositionslider.setValue( config.presentationHorizontalPosition) self.horizontalpositionslider.setToolTip( str(config.presentationHorizontalPosition)) self.horizontalpositionslider.valueChanged.connect( self.presentationHorizontalPositionChanged) layout1.addRow("Horizontal Position", self.horizontalpositionslider) self.showBibleSelection = QRadioButton() self.showBibleSelection.setChecked(True) self.showBibleSelection.clicked.connect( lambda: self.selectRadio("bible")) layout1.addRow("Bible", self.showBibleSelection) if len(self.books) > 0: self.showHymnsSelection = QRadioButton() self.showHymnsSelection.setChecked(False) self.showHymnsSelection.clicked.connect( lambda: self.selectRadio("hymns")) layout1.addRow("Hymns", self.showHymnsSelection) # Second column layout2 = QVBoxLayout() self.bibleWidget = QWidget() self.bibleLayout = QFormLayout() checkbox = QCheckBox() checkbox.setText("") checkbox.setChecked(config.presentationParser) checkbox.stateChanged.connect(self.presentationParserChanged) checkbox.setToolTip("Parse bible verse reference in the entered text") self.bibleLayout.addRow("Bible Reference", checkbox) versionCombo = QComboBox() self.bibleVersions = self.parent.textList versionCombo.addItems(self.bibleVersions) initialIndex = 0 if config.mainText in self.bibleVersions: initialIndex = self.bibleVersions.index(config.mainText) versionCombo.setCurrentIndex(initialIndex) versionCombo.currentIndexChanged.connect(self.changeBibleVersion) self.bibleLayout.addRow("Bible Version", versionCombo) self.textEntry = QPlainTextEdit("John 3:16; Rm 5:8") self.bibleLayout.addRow(self.textEntry) button = QPushButton("Presentation") button.setToolTip("Go to Presentation") button.clicked.connect(self.goToPresentation) self.bibleLayout.addWidget(button) self.bibleLayout.addItem( QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)) self.bibleWidget.setLayout(self.bibleLayout) self.hymnWidget = QWidget() self.hymnLayout = QFormLayout() selected = 0 book = "Hymn Lyrics - English" if book in self.books: selected = self.books.index(book) self.bookList = QComboBox() self.bookList.addItems(self.books) self.bookList.setCurrentIndex(selected) self.bookList.currentIndexChanged.connect(self.selectHymnBook) self.hymnLayout.addWidget(self.bookList) self.chapterlist = QListView() self.chapterlist.clicked.connect(self.selectHymn) # self.chapterlist.selectionModel().selectionChanged.connect(self.selectHymn) self.hymnLayout.addWidget(self.chapterlist) self.buttons = [] for count in range(0, 10): hymnButton = QPushButton() hymnButton.setText(" ") hymnButton.setEnabled(False) hymnButton.clicked.connect(partial(self.selectParagraph, count)) self.hymnLayout.addWidget(hymnButton) self.buttons.append(hymnButton) self.selectHymnBook(selected) self.hymnWidget.setLayout(self.hymnLayout) self.hymnWidget.hide() layout2.addWidget(self.bibleWidget) if len(self.books) > 0: layout2.addWidget(self.hymnWidget) layout.addLayout(layout1) layout.addLayout(layout2) self.setLayout(layout) def selectRadio(self, option): if option == "bible": self.bibleWidget.show() if len(self.books) > 0: self.hymnWidget.hide() elif option == "hymns": self.bibleWidget.hide() if len(self.books) > 0: self.hymnWidget.show() def selectHymnBook(self, option): from ToolsSqlite import Book from qtpy.QtCore import QStringListModel if len(self.books) > 0: self.hymnBook = self.books[option] self.hymns = sorted(Book(self.hymnBook).getTopicList()) self.chapterModel = QStringListModel(self.hymns) self.chapterlist.setModel(self.chapterModel) def selectHymn(self, option): from ToolsSqlite import Book row = option.row() self.hymn = self.hymns[row] book = Book(self.hymnBook) sections = book.getParagraphSectionsByChapter(self.hymn) count = 0 for button in self.buttons: if count < len(sections): section = sections[count] text = section.replace("<br>", "")[:30] button.setText(text) button.setEnabled(True) else: button.setText(" ") button.setEnabled(False) count += 1 def selectParagraph(self, paragraph): command = "SCREENBOOK:::{0}:::{1}:::{2}".format( self.hymnBook, self.hymn, paragraph) self.parent.runTextCommand(command) def goToPresentation(self): command = "SCREEN:::{0}".format(self.textEntry.toPlainText()) self.parent.runTextCommand(command) def changeColor(self): from qtpy.QtGui import QColor from qtpy.QtWidgets import QColorDialog color = QColorDialog.getColor( QColor(config.presentationColorOnDarkTheme if config.theme == "dark" else config.presentationColorOnLightTheme), self) if color.isValid(): colorName = color.name() if config.theme == "dark": config.presentationColorOnDarkTheme = colorName else: config.presentationColorOnLightTheme = colorName buttonStyle = "QPushButton {0}background-color: {2}; color: {3};{1}".format( "{", "}", colorName, "white" if config.theme == "dark" else "black") self.changecolorbutton.setStyleSheet(buttonStyle) def presentationFontSizeChanged(self, value): config.presentationFontSize = value * 0.5 self.fontsizeslider.setToolTip(str(config.presentationFontSize)) def presentationMarginChanged(self, value): config.presentationMargin = value self.marginslider.setToolTip(str(config.presentationMargin)) def presentationVerticalPositionChanged(self, value): config.presentationVerticalPosition = value self.verticalpositionslider.setToolTip( str(config.presentationVerticalPosition)) def presentationHorizontalPositionChanged(self, value): config.presentationHorizontalPosition = value self.horizontalpositionslider.setValue( config.presentationHorizontalPosition) def presentationParserChanged(self): config.presentationParser = not config.presentationParser def changeBibleVersion(self, index): if __name__ == '__main__': config.mainText = self.bibleVersions[index] else: command = "TEXT:::{0}".format(self.bibleVersions[index]) self.parent.runTextCommand(command)