def __init__(self, parent=None, prefix='', is_main=False): """Init.""" super().__init__(parent) self.setObjectName('ITApp') ld_tienbl = QLabel('Enable Pulses', self, alignment=Qt.AlignCenter) bt_tienblsel = PyDMStateButton( self, prefix + 'IT-EGH:TI-TrigGen:ChanOut-Sel') led_tienblsts = SiriusLedState( self, prefix + 'IT-EGH:TI-TrigGen:ChanOut-Sts') lay = QGridLayout(self) lay.setAlignment(Qt.AlignCenter) lay.setContentsMargins(0, 0, 0, 0) glay = QGridLayout() glay.addWidget(ld_tienbl, 0, 0, 1, 2) glay.addWidget(bt_tienblsel, 1, 0) glay.addWidget(led_tienblsts, 1, 1) if not is_main: gbox = QGroupBox('Timing', self) gbox.setLayout(glay) lay.addWidget(gbox) else: lb_title = QLabel('<h3>IT - Timing</h3>', self, alignment=Qt.AlignCenter) lay.setHorizontalSpacing(15) lay.setVerticalSpacing(15) lay.addWidget(lb_title, 0, 0) lay.addLayout(glay, 1, 0)
def _setupui(self): evg = PVName(LLTimeSearch.get_evg_name()) g1 = LLButton(evg, '', self.prefix, self) self.g1 = g1 fouts = LLTimeSearch.get_evg2fout_mapping() fouts = [(out, down) for out, down in fouts.items()] g2 = self.setupdown(fouts) self.g2 = g2 g3 = list() trgsrcs = LLTimeSearch.get_fout2trigsrc_mapping() for _, down in fouts: downs = trgsrcs[down.device_name] downs = sorted([(ou, dwn) for ou, dwn in downs.items()]) g3.append(self.setupdown(downs)) lay = QGridLayout(self) lay.setHorizontalSpacing(12) lay.setVerticalSpacing(20) align = Qt.AlignHCenter | Qt.AlignTop lay.addWidget(g1, 0, 0, 1, len(g3), align) for i, g in enumerate(g2): lay.addWidget(g, 1, i, align) self.g3 = list() for i, gs in enumerate(g3): for j, g in enumerate(gs): if not j: self.g3.append(g) lay.addWidget(g, j + 2, i)
def _setupUi(self): self.le_label = QLineEdit(self) self.sb_time = QDoubleSpinBoxPlus(self) self.sb_time.setMaximum(490) self.sb_time.setDecimals(3) self.bt_duplic = QPushButton('Duplicate', self) self.bt_duplic.setAutoDefault(False) self.bt_duplic.setDefault(False) self.bt_duplic.clicked.connect(self._emitConfigData) self.bt_cancel = QPushButton('Cancel', self) self.bt_cancel.setAutoDefault(False) self.bt_cancel.setDefault(False) self.bt_cancel.clicked.connect(self.close) # layout lay = QGridLayout() lay.setVerticalSpacing(15) lay.addWidget(QLabel('<h4>Duplicate Normalized Configuration</h4>', self), 0, 0, 1, 2, alignment=Qt.AlignCenter) lay.addWidget( QLabel( 'Choose a label and a time to insert\n' 'the new configuration:', self), 1, 0, 1, 2) lay.addWidget(QLabel('Label: ', self), 2, 0) lay.addWidget(self.le_label, 2, 1) lay.addWidget(QLabel('Time [ms]: ', self), 3, 0) lay.addWidget(self.sb_time, 3, 1) lay.addWidget(self.bt_cancel, 4, 0) lay.addWidget(self.bt_duplic, 4, 1) self.setLayout(lay)
def _setupUi(self): self.sb_confignumber = QSpinBoxPlus(self) self.sb_confignumber.setMinimum(1) self.sb_confignumber.setMaximum(max(self.table_map['rows'].keys()) + 1) self.sb_confignumber.setStyleSheet("""max-width:5em;""") self.sb_confignumber.valueChanged.connect(self._searchConfigByIndex) self.bt_delete = QPushButton('Delete', self) self.bt_delete.setAutoDefault(False) self.bt_delete.setDefault(False) self.bt_delete.clicked.connect(self._emitConfigData) self.l_configid = QLabel('', self) self.l_configid.setSizePolicy(QSzPlcy.MinimumExpanding, QSzPlcy.Expanding) self.sb_confignumber.setValue(self.selected_row + 1) self._searchConfigByIndex(self.selected_row + 1) self.bt_cancel = QPushButton('Cancel', self) self.bt_cancel.setAutoDefault(False) self.bt_cancel.setDefault(False) self.bt_cancel.clicked.connect(self.close) glay = QGridLayout() glay.setVerticalSpacing(15) glay.setHorizontalSpacing(10) label = QLabel('<h4>Delete a Normalized Configuration</h4>', self) label.setAlignment(Qt.AlignCenter) glay.addWidget(label, 0, 0, 1, 2) glay.addWidget(self.sb_confignumber, 2, 0) glay.addWidget(self.l_configid, 2, 1) glay.addWidget(self.bt_cancel, 4, 0) glay.addWidget(self.bt_delete, 4, 1) self.setLayout(glay)
def create_statistics(self, wid, position=True): text, unit, names, _ = self._get_properties(position) wid = QWidget(wid) hbl = QHBoxLayout(wid) hbl.addStretch() grpbx = QGroupBox('Statistics', wid) hbl.addWidget(grpbx) hbl.addStretch() gdl = QGridLayout(grpbx) gdl.setHorizontalSpacing(20) gdl.setVerticalSpacing(20) stats = ('MeanValue', 'Sigma', 'MinValue', 'MaxValue') for j, stat in enumerate(('Average', 'Sigma', 'Minimum', 'Maximum')): lab = QLabel(stat, wid) lab.setAlignment(Qt.AlignCenter) gdl.addWidget(lab, 0, j+1) for i, name in enumerate(names): lab = QLabel(text[:3] + name, wid) lab.setAlignment(Qt.AlignCenter) gdl.addWidget(lab, i+1, 0) for j, stat in enumerate(stats): lab = SiriusLabel(wid, init_channel=self.get_pvname( name+'_STATS'+stat+'_RBV')) lab.setAlignment(Qt.AlignCenter) lab.unit_changed(unit) lab.showUnits = True lab.precisionFromPV = False lab.precision = 3 gdl.addWidget(lab, i+1, j+1) return wid
def _setupUi(self): cw = QWidget(self) glay = QGridLayout(cw) glay.setHorizontalSpacing(10) glay.setVerticalSpacing(10) lab = QLabel('<h3>Booster Energy Ramping</h3>', cw) lab.setStyleSheet(""" min-height:1.55em; max-height: 1.55em; qproperty-alignment: 'AlignVCenter | AlignRight'; background-color: qlineargradient(spread:pad, x1:1, y1:0.0227273, x2:0, y2:0, stop:0 rgba(173, 190, 207, 255), stop:1 rgba(213, 213, 213, 255));""") glay.addWidget(lab, 0, 0, 1, 2) self.settings = Settings( self, self.prefix, self.ramp_config, self._tunecorr_configname, self._chromcorr_configname) self.setMenuBar(self.settings) self.status_and_commands = StatusAndCommands( self, self.prefix, self.ramp_config) glay.addWidget(self.status_and_commands, 1, 1) self.config_parameters = ConfigParameters( self, self.prefix, self.ramp_config, self._undo_stack, self._tunecorr_configname, self._chromcorr_configname) self.config_parameters.setObjectName('ConfigParameters') glay.addWidget(self.config_parameters, 1, 0) glay.setColumnStretch(0, 15) glay.setColumnStretch(1, 1) self.setCentralWidget(cw)
def _setupCoeffSettingsWidget(self): ld_coefchoo = QLabel('Choose Set', self, alignment=Qt.AlignRight) cb_coefchoo = PyDMEnumComboBox(self, self.dev_pref + ':LDSET') pb_coefload = PyDMPushButton(parent=self, label='Apply Set', icon=qta.icon('mdi.upload'), init_channel=self.dev_pref + ':BO_CPCOEFF', pressValue=1) pb_coefload.setStyleSheet("icon-size:20px;") pb_coefvrfy = PyDMPushButton(parent=self, label='Verify Set', icon=qta.icon('mdi.check-circle-outline'), init_channel=self.dev_pref + ':BO_CVERIFY', pressValue=1) pb_coefvrfy.setStyleSheet("icon-size:20px;") ld_gen = QLabel('<h4>Generate Coefficients</h4>', self, alignment=Qt.AlignCenter) ld_gengain = QLabel('Gain [0-1]', self, alignment=Qt.AlignRight) sb_gengain = PyDMSpinbox(self, self.dev_pref + ':FLT_GAIN') sb_gengain.showStepExponent = False ld_genphs = QLabel('Phase [°]', self, alignment=Qt.AlignRight) sb_genphs = PyDMSpinbox(self, self.dev_pref + ':FLT_PHASE') sb_genphs.showStepExponent = False ld_genfreq = QLabel('Frequency [0-1]', self, alignment=Qt.AlignRight) sb_genfreq = PyDMSpinbox(self, self.dev_pref + ':FLT_FREQ') sb_genfreq.showStepExponent = False ld_genntap = QLabel('Number of taps', self, alignment=Qt.AlignRight) sb_genntap = PyDMSpinbox(self, self.dev_pref + ':FLT_TAPS') sb_genntap.showStepExponent = False wid = QWidget(self) lay_genset = QGridLayout(wid) lay_genset.setVerticalSpacing(6) lay_genset.setHorizontalSpacing(9) lay_genset.addWidget(ld_gen, 0, 1, 1, 2) lay_genset.addWidget(ld_gengain, 1, 1) lay_genset.addWidget(sb_gengain, 1, 2) lay_genset.addWidget(ld_genphs, 2, 1) lay_genset.addWidget(sb_genphs, 2, 2) lay_genset.addWidget(ld_genfreq, 3, 1) lay_genset.addWidget(sb_genfreq, 3, 2) lay_genset.addWidget(ld_genntap, 4, 1) lay_genset.addWidget(sb_genntap, 4, 2) lay_genset.addWidget(ld_coefchoo, 5, 1) lay_genset.addWidget(cb_coefchoo, 5, 2) lay = QGridLayout() lay_genset.addLayout(lay, 6, 1, 1, 2) lay.addWidget(pb_coefload, 0, 0) lay.addWidget(pb_coefvrfy, 0, 2) lay.setColumnStretch(1, 2) lay_genset.setRowStretch(7, 2) lay_genset.setColumnStretch(0, 2) lay_genset.setColumnStretch(3, 2) return wid
def _setupUi(self): cwid = QWidget(self) self.setCentralWidget(cwid) title = QLabel('<h3>Machine Reports</h3>', self, alignment=Qt.AlignCenter) self._timesel_gbox = self._setupTimePeriodSelWidget() self._timesel_gbox.setObjectName('timesel_gbox') self._timesel_gbox.setStyleSheet( "#timesel_gbox{min-height: 8em; max-height: 8em;}") self._progress_list = QListWidget(self) self._progress_list.setObjectName('progress_list') self._progress_list.setStyleSheet( "#progress_list{min-height: 8em; max-height: 8em;}") self._reports_wid = QTabWidget(cwid) self._reports_wid.setObjectName('ASTab') self._reports_wid.addTab(self._setupUserShiftStatsWidget(), 'User Shift Stats') self._reports_wid.addTab(self._setupLightSourceUsageStats(), 'Light Source Usage Stats') self._reports_wid.addTab(self._setupStoredCurrentStats(), 'Stored Current Stats') self._pb_showraw = QPushButton(qta.icon('mdi.chart-line'), 'Show Raw Data', self) self._pb_showraw.setEnabled(False) self._pb_showraw.clicked.connect(self._show_raw_data) self._pb_showpvsd = QPushButton(qta.icon('mdi.chart-line'), 'Show Progrmd.vs.Delivered Hours', self) self._pb_showpvsd.setEnabled(False) self._pb_showpvsd.clicked.connect(self._show_progmd_vs_delivd) lay = QGridLayout(cwid) lay.setVerticalSpacing(10) lay.setHorizontalSpacing(10) lay.setContentsMargins(18, 9, 18, 9) lay.addWidget(title, 0, 0, 1, 3) lay.addWidget(self._timesel_gbox, 1, 0) lay.addWidget(self._progress_list, 1, 1, 1, 2, alignment=Qt.AlignBottom) lay.addWidget(self._reports_wid, 2, 0, 1, 3) lay.addWidget(self._pb_showpvsd, 4, 0, alignment=Qt.AlignLeft) lay.addWidget(self._pb_showraw, 4, 2, alignment=Qt.AlignRight) self._updateUserShiftStats(setup=True) self._updateStoredCurrentStats(setup=True) self._updateLightSourceUsageStats(setup=True)
def _setupChromWidget(self): for cord in ['X', 'Y']: setattr(self, 'label_Chrom'+cord, QLabel('ξ<sub>'+cord+'</sub>: ')) lab = getattr(self, 'label_Chrom'+cord) lab.setStyleSheet("min-width:1.55em; max-width:1.55em;") setattr(self, 'sb_Chrom'+cord, QDoubleSpinBoxPlus(self)) sb = getattr(self, 'sb_Chrom'+cord) sb.setDecimals(6) sb.setMinimum(-5) sb.setMaximum(5) sb.setSingleStep(0.0001) sb.setObjectName('chrom'+cord) sb.setValue(self._deltas['chrom'+cord]) sb.editingFinished.connect(self._handleChromSet) label_SL = QLabel('<h4>ΔSL [1/m<sup>2</sup>]</h4>', self) label_SL.setStyleSheet("""min-height:1.55em; max-height:1.55em; qproperty-alignment: AlignCenter;""") self.l_deltaSLSF = QLabel('', self) self.l_deltaSLSD = QLabel('', self) self.bt_update_ref_deltaSL = QPushButton('Update reference', self) self.bt_update_ref_deltaSL.clicked.connect( _part(self._updateReference, 'sexts')) gbox = QGroupBox('Chromaticity', self) lay = QGridLayout() lay.addWidget(self.label_ChromX, 1, 0) lay.addWidget(self.sb_ChromX, 1, 1) lay.addWidget(self.label_ChromY, 1, 3) lay.addWidget(self.sb_ChromY, 1, 4) lay.addWidget(label_SL, 3, 0, 1, 5) lay.addWidget(QLabel('SF: '), 4, 0) lay.addWidget(self.l_deltaSLSF, 4, 1) lay.addWidget(QLabel('SD: '), 4, 3) lay.addWidget(self.l_deltaSLSD, 4, 4) lay.addWidget(self.bt_update_ref_deltaSL, 6, 3, 1, 2) lay.setVerticalSpacing(6) lay.setColumnStretch(0, 2) lay.setColumnStretch(1, 4) lay.setColumnStretch(2, 1) lay.setColumnStretch(3, 2) lay.setColumnStretch(4, 4) lay.setRowStretch(0, 1) lay.setRowStretch(1, 2) lay.setRowStretch(2, 1) lay.setRowStretch(3, 2) lay.setRowStretch(4, 2) lay.setRowStretch(5, 1) lay.setRowStretch(6, 2) gbox.setLayout(lay) return gbox
def _setupTuneWidget(self): for cord in ['X', 'Y']: setattr(self, 'label_deltaTune'+cord, QLabel('Δν<sub>'+cord+'</sub>: ')) lab = getattr(self, 'label_deltaTune'+cord) lab.setStyleSheet("min-width:1.55em; max-width:1.55em;") setattr(self, 'sb_deltaTune'+cord, QDoubleSpinBoxPlus(self)) sb = getattr(self, 'sb_deltaTune'+cord) sb.setDecimals(6) sb.setMinimum(-5) sb.setMaximum(5) sb.setSingleStep(0.0001) sb.setObjectName('tune'+cord) sb.editingFinished.connect(self._handleDeltaTuneSet) label_KL = QLabel('<h4>ΔKL [1/m]</h4>', self) label_KL.setStyleSheet("""min-height:1.55em; max-height:1.55em; qproperty-alignment: AlignCenter;""") self.l_deltaKLQF = QLabel('', self) self.l_deltaKLQD = QLabel('', self) self.bt_update_ref_deltaKL = QPushButton('Update reference', self) self.bt_update_ref_deltaKL.clicked.connect( _part(self._updateReference, 'quads')) gbox = QGroupBox('Tune', self) lay = QGridLayout() lay.addWidget(self.label_deltaTuneX, 1, 0) lay.addWidget(self.sb_deltaTuneX, 1, 1) lay.addWidget(self.label_deltaTuneY, 1, 3) lay.addWidget(self.sb_deltaTuneY, 1, 4) lay.addWidget(label_KL, 3, 0, 1, 5) lay.addWidget(QLabel('QF: '), 4, 0) lay.addWidget(self.l_deltaKLQF, 4, 1) lay.addWidget(QLabel('QD: '), 4, 3) lay.addWidget(self.l_deltaKLQD, 4, 4) lay.addWidget(self.bt_update_ref_deltaKL, 6, 3, 1, 2) lay.setVerticalSpacing(6) lay.setColumnStretch(0, 2) lay.setColumnStretch(1, 4) lay.setColumnStretch(2, 1) lay.setColumnStretch(3, 2) lay.setColumnStretch(4, 4) lay.setRowStretch(0, 1) lay.setRowStretch(1, 2) lay.setRowStretch(2, 1) lay.setRowStretch(3, 2) lay.setRowStretch(4, 2) lay.setRowStretch(5, 1) lay.setRowStretch(6, 2) gbox.setLayout(lay) return gbox
def _setupUi(self): cw = QWidget(self) self.setCentralWidget(cw) self.title = QLabel('<h2>' + self.dev_desc + ' E-gun</h2>', self) wid_sysstatus = self._setupSysStatusWidget() wid_hvps = self._setupHVPSWidget() if self.sec == 'IT': wid_timing = ITTIWidget(self, self.prefix) wid_trigger = self._setupTriggerWidget() wid_filaps = self._setupFilaPSWidget() wid_biasps = self._setupBiasPSWidget() wid_pulseps = self._setupPulsePSWidget() wid_multipulseps = self._setupMultiPulsePSWidget() layout = QGridLayout(cw) layout.setVerticalSpacing(12) layout.setHorizontalSpacing(12) layout.addWidget(self.title, 0, 0, 1, 6) if self.sec == 'IT': layout.addWidget(wid_sysstatus, 1, 0, 2, 1) layout.addWidget(wid_hvps, 1, 1, 2, 4) layout.addWidget(wid_timing, 1, 5) layout.addWidget(wid_trigger, 2, 5) layout.addWidget(wid_filaps, 3, 0, 1, 6) layout.addWidget(wid_biasps, 4, 0, 1, 6) layout.addWidget(wid_pulseps, 5, 0, 1, 3) layout.addWidget(wid_multipulseps, 5, 3, 1, 3) layout.setRowStretch(1, 1) layout.setRowStretch(2, 3) else: layout.addWidget(wid_sysstatus, 1, 0, 1, 1) layout.addWidget(wid_hvps, 1, 1, 1, 4) layout.addWidget(wid_trigger, 1, 5) layout.addWidget(wid_filaps, 2, 0, 1, 6) layout.addWidget(wid_biasps, 3, 0, 1, 6) layout.addWidget(wid_pulseps, 4, 0, 1, 3) layout.addWidget(wid_multipulseps, 4, 3, 1, 3) layout.setColumnStretch(0, 3) layout.setColumnStretch(1, 2) layout.setColumnStretch(2, 2) layout.setColumnStretch(3, 2) layout.setColumnStretch(4, 2) layout.setColumnStretch(5, 3) self.setStyleSheet(""" QLabel{ max-height: 2em; qproperty-alignment: AlignCenter; }""")
def _setupFeedbackSettings(self): ld_fbenbl = QLabel('Enable', self) pb_fbenbl = PyDMStateButton(self, self.dev_pref+':FBCTRL') ld_coefsel = QLabel('Coeficient Set', self) cb_coefsel = PyDMEnumComboBox(self, self.dev_pref+':SETSEL') ld_sftgain = QLabel('Shift Gain', self) sb_sftgain = PyDMSpinbox(self, self.dev_pref+':SHIFTGAIN') sb_sftgain.showStepExponent = False ld_downspl = QLabel('Downsampling', self) sb_downspl = PyDMSpinbox(self, self.dev_pref+':PROC_DS') sb_downspl.showStepExponent = False ld_satthrs = QLabel('Sat. Threshold [%]', self) sb_satthrs = PyDMSpinbox(self, self.dev_pref+':SAT_THRESHOLD') sb_satthrs.showStepExponent = False lay = QGridLayout() lay.addWidget(ld_fbenbl, 1, 0) lay.addWidget(pb_fbenbl, 1, 1) lay.addWidget(ld_coefsel, 2, 0) lay.addWidget(cb_coefsel, 2, 1) lay.addWidget(ld_sftgain, 3, 0) lay.addWidget(sb_sftgain, 3, 1) lay.addWidget(ld_downspl, 4, 0) lay.addWidget(sb_downspl, 4, 1) lay.addWidget(ld_satthrs, 5, 0) lay.addWidget(sb_satthrs, 5, 1) if self._is_resumed: wid = QWidget() wid.setLayout(lay) fb_label = QLabel( '<h4>Feedback Settings</h4>', self, alignment=Qt.AlignCenter) lay.setContentsMargins(0, 0, 0, 0) lay.setVerticalSpacing(12) lay.addWidget(fb_label, 0, 0, 1, 2) else: wid = QGroupBox('Feedback Settings', self) wid.setLayout(lay) ld_gensts = QLabel('Setup Status', self) led_gensts = SiriusLedAlert(self, self.dev_pref+':ERRSUM') lay.addWidget(ld_gensts, 6, 0) lay.addWidget(led_gensts, 6, 1) return wid
def _setupUi(self): fbsett_wid = self._setupFeedbackSettings() status_wid = self._setupStatusWidget() lay = QGridLayout(self) lay.setAlignment(Qt.AlignTop | Qt.AlignCenter) if self._is_resumed: led_gensts = SiriusLedAlert(self, self.dev_pref+':ERRSUM') dev_label = QLabel( '<h3>'+self._label+'</h3>', self, alignment=Qt.AlignCenter) self.pb_detail = QPushButton(qta.icon('fa5s.ellipsis-v'), '', self) self.pb_detail.setObjectName('dtls') self.pb_detail.setStyleSheet( '#dtls{min-width:20px;max-width:20px;icon-size:15px;}') cmd = ['sirius-hla-si-di-bbb.py', '-dev', self.dev_pref] if self._prefix: cmd.extend(['-p', self._prefix]) connect_newprocess(self.pb_detail, cmd, self) hbox_label = QHBoxLayout() hbox_label.setContentsMargins(0, 0, 0, 0) hbox_label.addWidget(led_gensts, alignment=Qt.AlignLeft) hbox_label.addWidget(dev_label) hbox_label.addWidget(self.pb_detail, alignment=Qt.AlignRight) hbox_label.setStretch(0, 1) hbox_label.setStretch(1, 10) hbox_label.setStretch(2, 1) wid = QWidget(self) wid.setObjectName('box') wid.setStyleSheet(""" #box{border: 2px solid gray;}""") lay_box = QGridLayout(wid) lay_box.setVerticalSpacing(15) lay_box.addLayout(hbox_label, 0, 0) lay_box.addWidget(fbsett_wid, 1, 0) lay_box.addWidget(status_wid, 2, 0) lay.setContentsMargins(0, 0, 0, 0) lay.addWidget(wid) else: info_wid = BbBInfoWidget(self, self._prefix, self._device) lay.addWidget(fbsett_wid, 0, 1) lay.addWidget(status_wid, 0, 2) lay.addWidget(info_wid, 0, 3) lay.setColumnStretch(0, 3) lay.setColumnStretch(4, 3) lay.setRowStretch(1, 3)
def _setupUi(self): self.label_description = QLabel( '<h2>'+self.norm_config['label']+'</h2>', self) self.label_description.setAlignment(Qt.AlignCenter) self.label_time = QLabel('<h2>T = '+str(self.time)+'ms</h2>', self) self.label_time.setAlignment(Qt.AlignCenter) self.strengths = self._setupStrengthWidget() self.orbit = self._setupOrbitWidget() self.tune = self._setupTuneWidget() self.chrom = self._setupChromWidget() self.bt_apply = QPushButton(qta.icon('fa5s.angle-right'), '', self) self.bt_apply.setToolTip('Apply Changes to Machine') self.bt_apply.setStyleSheet('icon-size: 30px 30px;') self.bt_apply.clicked.connect(self._updateRampConfig) cw = QWidget() lay = QGridLayout() lay.setVerticalSpacing(10) lay.setHorizontalSpacing(10) lay.addWidget(self.label_description, 0, 0, 1, 2) lay.addWidget(self.label_time, 1, 0, 1, 2) lay.addWidget(self.strengths, 2, 0, 4, 1) lay.addWidget(self.orbit, 2, 1) lay.addWidget(self.tune, 3, 1) lay.addWidget(self.chrom, 4, 1) lay.addWidget(self.bt_apply, 5, 1) lay.setColumnStretch(0, 2) lay.setColumnStretch(1, 2) lay.setRowStretch(0, 2) lay.setRowStretch(1, 2) lay.setRowStretch(2, 8) lay.setRowStretch(3, 8) lay.setRowStretch(4, 8) lay.setRowStretch(5, 1) cw.setLayout(lay) cw.setStyleSheet(""" QGroupBox::title{ subcontrol-origin: margin; subcontrol-position: top center; padding: 0 2px 0 2px;}""") cw.setFocusPolicy(Qt.StrongFocus) self.setCentralWidget(cw)
def _setupUi(self): gbox_feedback = self._setupFBSettingsWidget() gbox_coefview = self._setupCoefficientsViewWidget() gbox_coefedit = self._setupCoefficientsEditWidget() lay = QGridLayout(self) lay.setAlignment(Qt.AlignLeft | Qt.AlignTop) lay.setVerticalSpacing(9) lay.setHorizontalSpacing(15) lay.addWidget(gbox_coefedit, 0, 0, 1, 2) lay.addWidget(gbox_feedback, 1, 0) if not self.dev_pref.endswith('-L'): gbox_bun_clean = self._setupBCSettingsWidget() lay.addWidget(gbox_bun_clean, 1, 1) lay.addWidget(gbox_coefview, 0, 2, 2, 1) lay.setColumnStretch(0, 2) lay.setColumnStretch(2, 1)
def _setupStatusLayout(self): self.log = PyDMLogLabel( self, self.posang_prefix.substitute(propty='Log-Mon')) self.lb_sts0 = QLabel(Const.STATUSLABELS[0], self) self.led_sts0 = SiriusLedAlert( self, self.posang_prefix.substitute(propty='Status-Mon'), bit=0) self.lb_sts1 = QLabel(Const.STATUSLABELS[1], self) self.led_sts1 = SiriusLedAlert( self, self.posang_prefix.substitute(propty='Status-Mon'), bit=1) self.lb_sts2 = QLabel(Const.STATUSLABELS[2], self) self.led_sts2 = SiriusLedAlert( self, self.posang_prefix.substitute(propty='Status-Mon'), bit=2) self.lb_sts3 = QLabel(Const.STATUSLABELS[3], self) self.led_sts3 = SiriusLedAlert( self, self.posang_prefix.substitute(propty='Status-Mon'), bit=3) self.pb_config = PyDMPushButton( self, label='Config Correctors', pressValue=1, init_channel=self.posang_prefix.substitute(propty='ConfigPS-Cmd')) lay = QGridLayout() lay.setVerticalSpacing(12) lay.setHorizontalSpacing(12) lay.addWidget(self.log, 0, 0, 6, 1) lay.addWidget(self.lb_sts0, 1, 2) lay.addWidget(self.led_sts0, 1, 1) lay.addWidget(self.lb_sts1, 2, 2) lay.addWidget(self.led_sts1, 2, 1) lay.addWidget(self.lb_sts2, 3, 2) lay.addWidget(self.led_sts2, 3, 1) lay.addWidget(self.lb_sts3, 4, 2) lay.addWidget(self.led_sts3, 4, 1) lay.addWidget(self.pb_config, 5, 1, 1, 2) if self._tl == 'TS': self.led_corrtype = PyDMLedMultiChannel( self, {self.posang_prefix.substitute( propty='CH1-Cte'): self.corrs['CH1']}) self.lb_corrtype = QLabel( 'Control ' + ('CH-Sept' if self._is_chsept else 'Sept-Sept')) lay.addWidget(self.led_corrtype, 0, 1) lay.addWidget(self.lb_corrtype, 0, 2) return lay
def _setupUi(self): self.gbox_reliablemeas = self._setupReliableMeasWidget() self.gbox_generalsettings = self._setupGeneralSettingsWidget() self.gbox_trigger = self._setupTriggerWidget() self.gbox_config = self._setupConfigurationWidget() self.gbox_normalmode = self._setupMeasSettingsWidget('Normal') self.gbox_fastmode = self._setupMeasSettingsWidget('Fast') lay_mode = QGridLayout() lay_mode.addWidget(self.gbox_normalmode, 0, 0) lay_mode.addWidget(self.gbox_fastmode, 0, 0) self.mode_channel = SiriusConnectionSignal( self.dcct_prefix.substitute(propty='MeasMode-Sel')) self.mode_channel.new_value_signal.connect(self._showMeasModeSettings) lay = QGridLayout() lay.addWidget( QLabel('<h3>' + self.device + ' Settings Details</h3>', self, alignment=Qt.AlignCenter), 0, 0, 1, 2) lay.addWidget(self.gbox_reliablemeas, 1, 0) lay.addWidget(self.gbox_generalsettings, 2, 0) lay.addWidget(self.gbox_config, 3, 0) lay.addWidget(self.gbox_trigger, 3, 1) lay.addLayout(lay_mode, 1, 1, 2, 1) lay.setVerticalSpacing(15) lay.setHorizontalSpacing(15) lay.setRowStretch(0, 1) lay.setRowStretch(1, 3) lay.setRowStretch(2, 7) lay.setRowStretch(3, 2) self.setLayout(lay) self.setStyleSheet(""" PyDMSpinbox, PyDMLabel{ min-width:6em; max-width:6em; qproperty-alignment: AlignCenter;} PyDMLedMultiChannel, PyDMStateButton, PyDMEnumComboBox{ min-width:6em; max-width:6em;}""")
def _setupUi(self): self.setTitle('System Information') ld_rffreq = QLabel('Nominal RF Frequency', self) lb_rffreq = PyDMLabel(self, self.dev_pref+':RF_FREQ') lb_rffreq.showUnits = True ld_revfrq = QLabel('Revolution Frequency', self) lb_revfrq = PyDMLabel(self, self.dev_pref+':FREV') lb_revfrq.showUnits = True ld_hn = QLabel('Harmonic Number', self) lb_hn = PyDMLabel(self, self.dev_pref+':HARM_NUM') ld_gtwrvw = QLabel('Gateway Revision', self) lb_gtwrvw = PyDMLabel(self, self.dev_pref+':REVISION') ld_gtwtyp = QLabel('Gateway Type', self) lb_gtwtyp = PyDMLabel(self, self.dev_pref+':GW_TYPE') lb_gtwtyp.displayFormat = PyDMLabel.DisplayFormat.Hex ld_ipaddr = QLabel('IP Address', self) lb_ipaddr = PyDMLabel(self, self.dev_pref+':IP_ADDR') lay = QGridLayout(self) lay.setVerticalSpacing(15) lay.addWidget(ld_rffreq, 0, 0) lay.addWidget(lb_rffreq, 0, 1) lay.addWidget(ld_revfrq, 1, 0) lay.addWidget(lb_revfrq, 1, 1) lay.addWidget(ld_hn, 2, 0) lay.addWidget(lb_hn, 2, 1) lay.addWidget(ld_gtwrvw, 3, 0) lay.addWidget(lb_gtwrvw, 3, 1) lay.addWidget(ld_gtwtyp, 4, 0) lay.addWidget(lb_gtwtyp, 4, 1) lay.addWidget(ld_ipaddr, 5, 0) lay.addWidget(lb_ipaddr, 5, 1) self.setStyleSheet( "PyDMLabel{qproperty-alignment: AlignCenter;}")
def setupui(self): self.setupmenus() mainwid = QWidget(self) self.setCentralWidget(mainwid) gridlayout = QGridLayout(mainwid) gridlayout.setHorizontalSpacing(20) gridlayout.setVerticalSpacing(20) globpars = self.setglobalparameters() gridlayout.addWidget(globpars, 0, 0) splitter = QSplitter(Qt.Horizontal) gridlayout.addWidget(splitter, 1, 0) events = self.setevents() events.setObjectName('events') splitter.addWidget(events) triggers = self.settriggers() triggers.setObjectName('triggers') splitter.addWidget(triggers)
def _setupChooseTIEventLayout(self): lay = QGridLayout() lay.setVerticalSpacing(3) lay.addWidget(QLabel('Control events:'), 0, 0, 1, 2) for i, ev in enumerate(EVT_LIST): lb = QLabel(ev, self) cb = QComboBox(self) cb.addItems(['None', 'Inj', 'Eje']) if ev in ['Linac', 'InjBO']: cb.setCurrentText('Inj') cb.setEnabled(False) elif ev == 'InjSI': cb.setCurrentText('Eje') cb.setEnabled(False) else: cb.setCurrentText('None') cb.setEnabled(True) cb.setObjectName(ev) cb.currentTextChanged.connect(self.update_ti_params) lay.addWidget(lb, i + 1, 0) lay.addWidget(cb, i + 1, 1) return lay
def _setupUi(self): lay = QGridLayout(self) lay.setAlignment(Qt.AlignTop) lay.setHorizontalSpacing(25) lay.setVerticalSpacing(15) self.title = QLabel( '<h4>LLRF Interlock Details</h4>', self, alignment=Qt.AlignCenter) lay.addWidget(self.title, 0, 0, 1, 3) # inputs col = 0 for name, dic in self.chs['LLRF Intlk Details']['Inputs'].items(): gbox = QGroupBox(name, self) lay_intlk = QGridLayout(gbox) lay_intlk.setAlignment(Qt.AlignTop) lay_intlk.setHorizontalSpacing(9) lay_intlk.setVerticalSpacing(0) icol = 0 for key in dic['Status']: desc = QLabel(key, self, alignment=Qt.AlignCenter) desc.setStyleSheet('QLabel{min-width:1em; max-width:2.5em;}') lay_intlk.addWidget(desc, 0, icol) icol += 1 labels = dic['Labels'] for idx, label in enumerate(labels): irow, icol = idx+1, 0 for key, pvn in dic['Status'].items(): led = SiriusLedAlert(self, self.prefix+pvn, bit=idx) led.shape = led.Square if key != 'Mon': led.offColor = led.DarkRed lay_intlk.addWidget(led, irow, icol) icol += 1 lbl = QLabel(label, self) lbl.setStyleSheet('QLabel{min-width:12em;}') lay_intlk.addWidget(lbl, irow, icol) lay.addWidget(gbox, 1, col) col += 1 # timestamps gbox_time = QGroupBox('Timestamps', self) lay_time = QGridLayout(gbox_time) lay_time.setAlignment(Qt.AlignTop) lay_time.setHorizontalSpacing(9) lay_time.setVerticalSpacing(9) for idx, pvn in self.chs['LLRF Intlk Details']['Timestamps'].items(): irow = int(idx)-1 desc = QLabel('Interlock '+idx, self, alignment=Qt.AlignCenter) desc.setStyleSheet('QLabel{min-width:6em;}') lbl = PyDMLabel(self, self.prefix+pvn) lbl.showUnits = True lay_time.addWidget(desc, irow, 0) lay_time.addWidget(lbl, irow, 1) lay.addWidget(gbox_time, 1, col)
def _setupUi(self): self._lb_desc = QLabel('<h3>Are you sure to Poweroff ' + self._device.dev + ' ' + self._device.idx + '?</h3>') self._pb_yes = PyDMPushButton(self, label='YES', pressValue=1, init_channel=self._mod_prefix + ':EMER_STOP') self._pb_yes.setObjectName('yes') self._pb_yes.setStyleSheet('#yes{background-color:red;}') self._pb_exit = QPushButton('EXIT', self) self._pb_exit.clicked.connect(self.close) lay = QGridLayout(self) lay.setHorizontalSpacing(20) lay.setVerticalSpacing(20) lay.addWidget(self._lb_desc, 0, 0, 1, 2) lay.addWidget(self._pb_yes, 1, 0, alignment=Qt.AlignCenter) lay.addWidget(self._pb_exit, 1, 1, alignment=Qt.AlignCenter)
def _setupDeltaControlLayout(self, axis=''): # pos label_pos = QLabel("<h4>Δ"+axis+"</h4>", self) sb_deltapos = PyDMSpinbox(self, self.posang_prefix.substitute( propty='DeltaPos'+axis.upper()+'-SP')) sb_deltapos.step_exponent = -2 sb_deltapos.update_step_size() sb_deltapos.showStepExponent = False lb_deltapos = PyDMLabel(self, self.posang_prefix.substitute( propty='DeltaPos'+axis.upper()+'-RB')) lb_deltapos.showUnits = True self._my_input_widgets.append(sb_deltapos) # ang label_ang = QLabel("<h4>Δ"+axis+"'</h4>", self) sb_deltaang = PyDMSpinbox(self, self.posang_prefix.substitute( propty='DeltaAng'+axis.upper()+'-SP')) sb_deltaang.step_exponent = -2 sb_deltaang.update_step_size() sb_deltaang.showStepExponent = False lb_deltaang = PyDMLabel(self, self.posang_prefix.substitute( propty='DeltaAng'+axis.upper()+'-RB')) lb_deltaang.showUnits = True self._my_input_widgets.append(sb_deltaang) lay = QGridLayout() lay.setVerticalSpacing(12) lay.setHorizontalSpacing(12) lay.addItem( QSpacerItem(10, 0, QSzPlcy.Expanding, QSzPlcy.Ignored), 0, 0) lay.addWidget(label_pos, 0, 1) lay.addWidget(sb_deltapos, 0, 2) lay.addWidget(lb_deltapos, 0, 3) lay.addWidget(label_ang, 1, 1) lay.addWidget(sb_deltaang, 1, 2) lay.addWidget(lb_deltaang, 1, 3) lay.addItem( QSpacerItem(10, 0, QSzPlcy.Expanding, QSzPlcy.Ignored), 0, 4) return lay
def _setupUi(self): lay = QGridLayout(self) lay.setAlignment(Qt.AlignTop) lay.setHorizontalSpacing(25) lay.setVerticalSpacing(15) self.title = QLabel( '<h3>RF Temperature Monitor</h3>', self, alignment=Qt.AlignCenter) lay.addWidget(self.title, 0, 0) if len(self.chs['TempMon']) == 1: dettab = QTabWidget(self) else: dettab = DetachableTabWidget(self) dettab.setObjectName(self.section+'Tab') for dettabtitle, dtcontent in self.chs['TempMon'].items(): if dettabtitle == 'Power': labels = list(dtcontent.keys()) channels = [self.prefix+ch for ch in dtcontent.values()] wid = BarGraph( channels=channels, xLabels=labels, yLabel='Power [kW]', title=dettabtitle) else: wid = QTabWidget() for tabtitle, content in dtcontent.items(): labels = list(content.keys()) channels = [self.prefix+ch for ch in content.values()] ylabel = 'Temperature [°C]' \ if 'temp' in dettabtitle.lower() \ else 'Diss. Power [kW]' tabwid = BarGraph( channels=channels, xLabels=labels, yLabel=ylabel, title=dettabtitle) wid.addTab(tabwid, tabtitle) dettab.addTab(wid, dettabtitle) lay.addWidget(dettab, 1, 0)
def _setupUi(self): aux_label = '' if not self._filters \ else ' - '+self._filters['sec']+' '+self._filters['dev'] self._label = QLabel('<h3>PS Graph Monitor'+aux_label+'</h3>', self, alignment=Qt.AlignCenter) self.propty_sel = PSGraphProptySelWidget(self) self.propty_sel.change_matype(self._magfunc, self._pstype) self.graph = PSGraphMonWidget( self, self._prefix, self._psnames) self.propty_sel.propty_symb_changed.connect( self.graph.update_property_symb) self.propty_sel.propty_line_changed.connect( self.graph.update_property_line) if not self._filters: self.dev_sel = PSGraphDevicesSelWidget(self, self._psnames) self.dev_sel.matype_changed.connect(self.propty_sel.change_matype) self.dev_sel.psnames_changed.connect(self.graph.update_psnames) cwid = QWidget() lay = QGridLayout(cwid) lay.setVerticalSpacing(9) lay.addWidget(self._label, 0, 0, 1, 2) if not self._filters: lay.addWidget(self.dev_sel, 1, 0) lay.addItem( QSpacerItem(1, 1, QSzPlcy.Expanding, QSzPlcy.Ignored), 1, 1) lay.addWidget(self.propty_sel, 2, 0) lay.addItem( QSpacerItem(1, 1, QSzPlcy.Expanding, QSzPlcy.Ignored), 2, 1) lay.addWidget(self.graph, 3, 0, 1, 2) lay.setColumnStretch(0, 1) lay.setColumnStretch(1, 1) self.setCentralWidget(cwid)
def _setupUi(self): self.cameraview_widget = QWidget() self.cameraview_widget.setLayout(self._cameraviewLayout()) self.settings_widget = QWidget(self) self.settings_widget.setLayout(self._settingsLayout()) self.settings_widget.setStyleSheet(""" .QLabel{ min-width: 5em;} QLabel{ qproperty-alignment: AlignCenter;}""") self.calibrationgrid_widget = QWidget(self) self.calibrationgrid_widget.setLayout(self._calibrationgridLayout()) self.calibrationgrid_widget.setSizePolicy(QSzPlcy.Expanding, QSzPlcy.Expanding) self.calibrationgrid_widget.layout().setAlignment(Qt.AlignHCenter) self.tab = QTabWidget(self) self.tab.setStyleSheet(""" QTabWidget::pane { border-left: 2px solid gray; border-bottom: 2px solid gray; border-right: 2px solid gray; }""") self.tab.addTab(self.settings_widget, 'Camera Settings') self.tab.addTab(self.calibrationgrid_widget, 'Calibration') self.statistics_groupBox = QGroupBox('Statistics', self) self.statistics_groupBox.setLayout(self._statisticsLayout()) self.statistics_groupBox.setSizePolicy(QSzPlcy.Expanding, QSzPlcy.Expanding) self.statistics_groupBox.setStyleSheet(""" .QLabel{ min-width:0.28em; max-width:0.28em; min-height:1.29em; max-height:1.29em;} QLabel{ qproperty-alignment: AlignCenter;} PyDMWidget{ min-width:4.84em; max-width:4.84em; min-height:1.29em; max-height:1.29em;}""") self.trigger_groupBox = QGroupBox('Trigger', self) if 'TB' in self.device or 'BO' in self.device: trg_prefix = 'AS-Fam:TI-Scrn-TBBO' elif 'TS' in self.device: trg_prefix = 'TS-Fam:TI-Scrn' hbl = QHBoxLayout(self.trigger_groupBox) hbl.addWidget( HLTriggerSimple(parent=self.trigger_groupBox, device=trg_prefix, prefix=self.prefix)) self.trigger_groupBox.setLayout(hbl) self.trigger_groupBox.setStyleSheet(""" PyDMWidget{ min-width:4.84em; max-width:4.84em; min-height:1.29em; max-height:1.29em;}""") vlay = QVBoxLayout() vlay.addWidget(self.statistics_groupBox) vlay.addWidget(self.trigger_groupBox) vlay.setSpacing(10) lay = QGridLayout(self) lay.setHorizontalSpacing(10) lay.setVerticalSpacing(10) lay.addWidget(self.cameraview_widget, 0, 0, 1, 2) lay.addWidget(self.tab, 1, 0) lay.addLayout(vlay, 1, 1) lay.setRowStretch(0, 15) lay.setRowStretch(1, 7)
def _setupUi(self): lay_temp1 = QFormLayout() lay_temp1.setHorizontalSpacing(9) lay_temp1.setVerticalSpacing(9) lay_temp1.setLabelAlignment(Qt.AlignRight) lay_temp1.setFormAlignment(Qt.AlignTop) lb_temp1 = QLabel('Cell and Coupler\nTemperatures\nPT100', self) lb_temp1.setStyleSheet( 'font-weight:bold; qproperty-alignment:AlignCenter;') lay_temp1.addRow(lb_temp1) lims = self.chs['Cav Sts']['Temp']['Cells Limits'] tooltip = 'Interlock limits: \nMin: ' + str(lims[0]) + \ '°C, Max: '+str(lims[1])+'°C' for idx, cell in enumerate(self.chs['Cav Sts']['Temp']['Cells']): lbl = PyDMLabel(self, self.prefix+cell[0]) lbl.showUnits = True lbl.setStyleSheet('min-width:3.5em; max-width:3.5em;') led = PyDMLedMultiChannel( self, {self.prefix+cell[0]: {'comp': 'wt', 'value': lims}, self.prefix+cell[0].replace('T-Mon', 'TUp-Mon'): 0, self.prefix+cell[0].replace('T-Mon', 'TDown-Mon'): 0}) led.setToolTip(tooltip) hbox = QHBoxLayout() hbox.setAlignment(Qt.AlignLeft) hbox.addWidget(lbl) hbox.addWidget(led) lay_temp1.addRow('Cell '+str(idx + 1)+': ', hbox) ch_coup = self.chs['Cav Sts']['Temp']['Coupler'][0] lims_coup = self.chs['Cav Sts']['Temp']['Coupler Limits'] lb_coup = PyDMLabel(self, self.prefix+ch_coup) lb_coup.setStyleSheet('min-width:3.5em; max-width:3.5em;') lb_coup.showUnits = True led_coup = PyDMLedMultiChannel( self, {self.prefix+ch_coup: {'comp': 'wt', 'value': lims_coup}, self.prefix+ch_coup.replace('T-Mon', 'TUp-Mon'): 0, self.prefix+ch_coup.replace('T-Mon', 'TDown-Mon'): 0}) led_coup.setToolTip( 'Interlock limits: \n' 'Min: '+str(lims_coup[0])+'°C, Max: '+str(lims_coup[1])+'°C') hb_coup = QHBoxLayout() hb_coup.setAlignment(Qt.AlignLeft) hb_coup.addWidget(lb_coup) hb_coup.addWidget(led_coup) lay_temp1.addRow('Coupler: ', hb_coup) lay_temp2 = QFormLayout() lay_temp2.setHorizontalSpacing(9) lay_temp2.setVerticalSpacing(9) lay_temp2.setLabelAlignment(Qt.AlignRight) lay_temp2.setFormAlignment(Qt.AlignTop | Qt.AlignHCenter) lb_temp2 = QLabel('Cell\nTemperatures\nThermostats', self) lb_temp2.setStyleSheet( 'font-weight:bold; qproperty-alignment:AlignCenter;') lay_temp2.addRow(lb_temp2) for idx, cell in enumerate(self.chs['Cav Sts']['Temp']['Cells']): led = SiriusLedAlert(self) led.setToolTip('Interlock limits:\nMax: 60°C') led.channel = self.prefix+cell[0].replace('T-Mon', 'Tms-Mon') lay_temp2.addRow('Cell '+str(idx + 1)+': ', led) lay_dtemp = QFormLayout() lay_dtemp.setHorizontalSpacing(9) lay_dtemp.setVerticalSpacing(9) lay_dtemp.setLabelAlignment(Qt.AlignRight) lay_dtemp.setFormAlignment(Qt.AlignTop | Qt.AlignHCenter) lb_dtemp = QLabel('Disc\nTemperatures\nThermostats', self) lb_dtemp.setStyleSheet( 'font-weight:bold; qproperty-alignment:AlignCenter;') lay_dtemp.addRow(lb_dtemp) for idx, disc in enumerate(self.chs['Cav Sts']['Temp']['Discs']): led = SiriusLedAlert(self) led.setToolTip('Interlock limits:\nMax: 60°C') led.channel = self.prefix+disc lay_dtemp.addRow('Disc '+str(idx)+': ', led) self.led_hdflwrt1 = SiriusLedAlert( self, self.prefix+self.chs['Cav Sts']['FlwRt'][0]) self.led_hdflwrt2 = SiriusLedAlert( self, self.prefix+self.chs['Cav Sts']['FlwRt'][1]) self.led_hdflwrt3 = SiriusLedAlert( self, self.prefix+self.chs['Cav Sts']['FlwRt'][2]) lay_flwrt = QFormLayout() lay_flwrt.setHorizontalSpacing(9) lay_flwrt.setVerticalSpacing(9) lay_flwrt.setLabelAlignment(Qt.AlignRight) lay_flwrt.setFormAlignment(Qt.AlignTop) lb_flwrf = QLabel('Flow Switches', self) lb_flwrf.setStyleSheet( 'font-weight:bold; qproperty-alignment:AlignCenter;') lay_flwrt.addRow(lb_flwrf) lay_flwrt.addRow('Flow Switch 1: ', self.led_hdflwrt1) lay_flwrt.addRow('Flow Switch 2: ', self.led_hdflwrt2) lay_flwrt.addRow('Flow Switch 3: ', self.led_hdflwrt3) self.led_couppressure = SiriusLedAlert( self, self.prefix+self.chs['Cav Sts']['Vac']['Coupler ok']) self.led_pressure = SiriusLedAlert(self) self.led_pressure.setToolTip('Interlock limits:\nMax: 5e-7mBar') self.led_pressure.channel = \ self.prefix+self.chs['Cav Sts']['Vac']['Cells ok'] lay_vac = QFormLayout() lay_vac.setHorizontalSpacing(9) lay_vac.setVerticalSpacing(9) lay_vac.setLabelAlignment(Qt.AlignRight) lay_vac.setFormAlignment(Qt.AlignTop) lb_vac = QLabel('Vacuum', self) lb_vac.setStyleSheet( 'font-weight:bold; qproperty-alignment:AlignCenter;') lay_flwrt.addRow(lb_vac) lay_vac.addRow('Pressure Sensor: ', self.led_couppressure) lay_vac.addRow('Vacuum: ', self.led_pressure) lbl = QLabel('Cavity - Detailed Status', self) lbl.setStyleSheet( 'font-weight:bold; qproperty-alignment:AlignCenter;') lay = QGridLayout(self) lay.setHorizontalSpacing(30) lay.setVerticalSpacing(20) lay.addWidget(lbl, 0, 0, 1, 4) lay.addLayout(lay_temp1, 1, 0, 2, 1) lay.addLayout(lay_temp2, 1, 1, 2, 1) lay.addLayout(lay_dtemp, 1, 2, 2, 1) lay.addLayout(lay_flwrt, 1, 3) lay.addLayout(lay_vac, 2, 3) self.setStyleSheet(""" PyDMLabel{ qproperty-alignment: AlignLeft; } QLed{ max-width: 1.29em; } .QLabel{ max-height:4em; qproperty-alignment: AlignRight; }""")
def _setupUi(self): # Machine Shift self.wid_shift = QGroupBox('Machine Shift') machshift_pvname = SiriusPVName( 'AS-Glob:AP-MachShift:Mode-Sel').substitute(prefix=self._prefix) cbox_shift_mode = SiriusEnumComboBox(self, machshift_pvname) label_shift_mode = MachShiftLabel(self, self._prefix) label_shift_mode.label.setStyleSheet( 'QLabel{max-height: 2em; min-width: 7em;}') lay_shift = QGridLayout(self.wid_shift) lay_shift.setVerticalSpacing(5) lay_shift.setAlignment(Qt.AlignCenter) lay_shift.addWidget(cbox_shift_mode, 1, 0) lay_shift.addWidget(label_shift_mode, 2, 0) # Injection System self.wid_injsys = QGroupBox('Inj.System') wid_injsys = InjSysStbyControlWidget(self, self._prefix, is_summary=True) lay_injsys = QGridLayout(self.wid_injsys) lay_injsys.setAlignment(Qt.AlignCenter) lay_injsys.setContentsMargins(0, 0, 0, 0) lay_injsys.addWidget(wid_injsys) # Egun triggers self.wid_egun = QGroupBox('Egun Trig.') self.wid_egun.setStyleSheet('min-width: 5em;') egun_dev = SiriusPVName('LI-01:EG-TriggerPS').substitute( prefix=self._prefix) but_egun_trigger = PyDMStateButton( self, egun_dev.substitute(propty_name='enable')) led_egun_trigger = SiriusLedState( self, egun_dev.substitute(propty_name='enablereal')) lay_egun = QGridLayout(self.wid_egun) lay_egun.setVerticalSpacing(5) lay_egun.addWidget(but_egun_trigger, 1, 0) lay_egun.addWidget(led_egun_trigger, 2, 0) # injection control injctrl_dev = SiriusPVName('AS-Glob:AP-InjCtrl') injctrl_dev = injctrl_dev.substitute(prefix=self._prefix) self.wid_inject = QGroupBox('Injection') self.ch_injmode = SiriusConnectionSignal( injctrl_dev.substitute(propty='Mode-Sts')) self.ch_injmode.new_value_signal[int].connect( self._handle_injmode_settings_vis) # # Settings label_sett = QLabel('<h4>Sett.</h4>', self, alignment=Qt.AlignCenter) led_sett = InjDiagLed(self) self.wid_injsett = QWidget() lay_injsett = QGridLayout(self.wid_injsett) lay_injsett.setContentsMargins(0, 0, 0, 0) lay_injsett.setAlignment(Qt.AlignTop) lay_injsett.addWidget(label_sett, 0, 0) lay_injsett.addWidget(led_sett, 1, 0) # # Auto Stop self.label_injauto = QLabel('<h4>AutoStop</h4>', self, alignment=Qt.AlignCenter) self.but_injauto = PyDMStateButton( self, injctrl_dev.substitute(propty='AutoStop-Sel')) self.led_injauto = SiriusLedState( self, injctrl_dev.substitute(propty='AutoStop-Sts')) self.wid_injauto = QWidget() self.wid_injauto.setObjectName('wid') self.wid_injauto.setStyleSheet("#wid{min-width: 8em; max-width: 8em;}") lay_injauto = QGridLayout(self.wid_injauto) lay_injauto.setContentsMargins(0, 0, 0, 0) lay_injauto.setAlignment(Qt.AlignTop) lay_injauto.addWidget(self.label_injauto, 0, 0) lay_injauto.addWidget(self.but_injauto, 1, 0) lay_injauto.addWidget(self.led_injauto, 2, 0) # # Top-up status label_tusts = QLabel('<h4>Status</h4>', self, alignment=Qt.AlignCenter) label_tunow = ClockLabel(self) label_tunow.setStyleSheet('max-height:2em;') label_tunxt = SiriusLabel( self, injctrl_dev.substitute(propty='TopUpNextInj-Mon')) label_tunxt.displayFormat = SiriusLabel.DisplayFormat.Time label_tunxt.setAlignment(Qt.AlignCenter) label_tunxt.setStyleSheet('max-height:2em;') but_round = PyDMPushButton( self, '', qta.icon('mdi.tilde'), 1, False, injctrl_dev.substitute(propty='TopUpNextInjRound-Cmd')) but_round.setObjectName('but') but_round.setStyleSheet( '#but{min-width:18px; max-width:18px; icon-size:16px;}') self.wid_tusts = QWidget() self.wid_tusts.setObjectName('wid') self.wid_tusts.setStyleSheet("#wid{min-width: 8em; max-width: 8em;}") lay_tusts = QGridLayout(self.wid_tusts) lay_tusts.setContentsMargins(0, 0, 0, 0) lay_tusts.setAlignment(Qt.AlignTop) lay_tusts.addWidget(label_tusts, 0, 0, 1, 2) lay_tusts.addWidget(QLabel('Now:', self), 1, 0) lay_tusts.addWidget(label_tunow, 1, 1) lay_tusts.addWidget(QLabel('Next:', self), 2, 0) lay_tusts.addWidget(label_tunxt, 2, 1) lay_tusts.addWidget(but_round, 2, 2) self.wid_tusts.setVisible(False) # # Control label_inj = QLabel('<h4>Control</h4>', self, alignment=Qt.AlignCenter) self.but_tiinj = EVGInjectionButton(self, self._prefix) self.but_topup = PyDMStateButton( self, injctrl_dev.substitute(propty='TopUpState-Sel')) self.but_topup.setVisible(False) lay_inject_sel = QGridLayout() lay_inject_sel.setAlignment(Qt.AlignCenter) lay_inject_sel.addWidget(self.but_tiinj, 0, 0) lay_inject_sel.addWidget(self.but_topup, 0, 0) led_injsts = EVGInjectionLed(self, self._prefix) label_injcnt = PyDMLabel(self) label_injcnt.setToolTip( 'Count injection pulses when Egun Trigger is enabled.') label_injcnt.channel = SiriusPVName( 'AS-Glob:AP-CurrInfo:InjCount-Mon').substitute(prefix=self._prefix) label_injcnt.setStyleSheet('QLabel{max-width: 3.5em;}') lay_inject_sts = QHBoxLayout() lay_inject_sts.setContentsMargins(0, 0, 0, 0) lay_inject_sts.setAlignment(Qt.AlignTop) lay_inject_sts.addWidget(led_injsts) lay_inject_sts.addWidget(label_injcnt) self.wid_injctrl = QWidget() lay_injctrl = QGridLayout(self.wid_injctrl) lay_injctrl.setContentsMargins(0, 0, 0, 0) lay_injctrl.setAlignment(Qt.AlignTop) lay_injctrl.addWidget(label_inj, 0, 2, alignment=Qt.AlignCenter) lay_injctrl.addLayout(lay_inject_sel, 1, 2, alignment=Qt.AlignCenter) lay_injctrl.addLayout(lay_inject_sts, 2, 2, alignment=Qt.AlignCenter) # # Injection Auxiliary section self.wid_injlog = QGroupBox('Injection Log') label_injlog = PyDMLogLabel(self, injctrl_dev.substitute(propty='Log-Mon'), replace=[ 'Remaining time', ]) lay_injlog = QGridLayout(self.wid_injlog) lay_injlog.addWidget(label_injlog, 0, 0) self.wid_injlog.setVisible(False) self.wid_mon = MonitorSummaryWidget(self, self._prefix) self.wid_mon.setVisible(False) # # Target Current self._ld_currtgt = QLabel('<h4>Target Curr.</h4>', self, alignment=Qt.AlignCenter) self._sb_currtgt = SiriusSpinbox( self, injctrl_dev.substitute(propty='TargetCurrent-SP')) self._sb_currtgt.showStepExponent = False self._lb_currtgt = PyDMLabel( self, injctrl_dev.substitute(propty='TargetCurrent-RB')) self._lb_currtgt.showUnits = True self._wid_tcurr = QWidget() lay_tcurr = QGridLayout(self._wid_tcurr) lay_tcurr.setContentsMargins(0, 0, 0, 0) lay_tcurr.setAlignment(Qt.AlignTop) lay_tcurr.addWidget(self._ld_currtgt, 0, 0) lay_tcurr.addWidget(self._sb_currtgt, 1, 0) lay_tcurr.addWidget(self._lb_currtgt, 2, 0) # # Bucket List self._bucket_list = BucketList(self, prefix=self._prefix, min_size=15) self.wid_fill = QWidget() lay_fill = QGridLayout(self.wid_fill) lay_fill.setContentsMargins(0, 0, 0, 0) lay_fill.setHorizontalSpacing(9) lay_fill.addWidget(self._wid_tcurr, 0, 0) lay_fill.addWidget(self._bucket_list, 0, 1) self.wid_fill.setVisible(False) pbt_aux = QPushButton('v', self) pbt_aux.setToolTip('Show Injection Auxiliary section.') pbt_aux.clicked.connect(self._toggle_show_injaux) pbt_aux.setStyleSheet('QPushButton{max-width: 0.8em;}') pbt_bl = QPushButton('>', self) pbt_bl.setToolTip('Show bucket list and target current controls.') pbt_bl.clicked.connect(self._toggle_show_bucketlist) pbt_bl.setStyleSheet('QPushButton{max-width: 0.8em;}') lay_inj = QGridLayout(self.wid_inject) lay_inj.setAlignment(Qt.AlignTop) lay_inj.setVerticalSpacing(5) lay_inj.setHorizontalSpacing(12) lay_inj.addWidget(self.wid_injsett, 0, 0, 2, 1) lay_inj.addWidget(self.wid_injauto, 0, 1, 2, 1) lay_inj.addWidget(self.wid_tusts, 0, 1, 2, 1) lay_inj.addWidget(self.wid_injctrl, 0, 2, 2, 1) lay_inj.addWidget(pbt_bl, 0, 3, alignment=Qt.AlignTop) lay_inj.addWidget(pbt_aux, 1, 3, alignment=Qt.AlignBottom) lay_inj.addWidget(self.wid_fill, 0, 4, 2, 1) # Current curr_pvname = SiriusPVName( 'SI-Glob:AP-CurrInfo:Current-Mon').substitute(prefix=self._prefix) self.label_curr = PyDMLabel(self, curr_pvname) self.label_curr.showUnits = True self.label_curr.setStyleSheet(""" QLabel{ font-size: 18pt; qproperty-alignment: AlignCenter; min-width: 6em; max-width: 6em; }""") self.wid_curr = QGroupBox('Current') lay_curr = QHBoxLayout(self.wid_curr) lay_curr.addWidget(self.label_curr) # RF Kill Beam self.wid_rfkill = QGroupBox('RF Kill Beam') self.wid_rfkill.setObjectName('RFKillBeam') rfkill_bt = RFKillBeamButton(self, self._prefix) rfkill_lay = QGridLayout(self.wid_rfkill) rfkill_lay.addWidget(rfkill_bt) # menu buttons self.wid_pbt = QPushButton('v', self) self.wid_pbt.clicked.connect(self._toggle_show_menubutton) self.wid_pbt.setStyleSheet('QPushButton{max-width: 0.8em;}') self._menubutton = get_object(ismenubar=False, parent=self) self._menubutton.layout().setContentsMargins(0, 0, 0, 0) self._menubutton.layout().setSpacing(4) self._menubutton.setVisible(False) hlay1 = QHBoxLayout() hlay1.setContentsMargins(0, 0, 0, 0) hlay1.addWidget(self.wid_shift) hlay1.addWidget(self.wid_injsys) hlay1.addWidget(self.wid_egun) hlay1.addWidget(self.wid_inject) hlay1.addWidget(self.wid_curr) hlay1.addWidget(self.wid_rfkill) hlay2 = QHBoxLayout() hlay2.setContentsMargins(0, 0, 0, 0) hlay2.addWidget(self.wid_injlog) hlay2.addWidget(self.wid_mon) cwid = QWidget(self) lay = QGridLayout(cwid) lay.addLayout(hlay1, 0, 0) lay.addLayout(hlay2, 1, 0) lay.addWidget(self._menubutton, 2, 0, 1, 2) lay.addWidget(self.wid_pbt, 0, 1, 2, 1, alignment=Qt.AlignRight | Qt.AlignBottom) self.setCentralWidget(cwid)
def _setupUi(self): # controls self.ld_machsht = QLabel('<h3>Shift: </h3>', self, alignment=Qt.AlignCenter) self.lb_machsht = MachShiftLabel(self, prefix=self.prefix) self.lb_machsht.label.setStyleSheet('QLabel{font-size: 45pt;}') box_mach = QHBoxLayout() box_mach.addWidget(self.ld_machsht) box_mach.addWidget(self.lb_machsht) box_mach.setStretch(0, 1) box_mach.setStretch(1, 4) pvname = _PVName('RA-RaSIA02:RF-IntlkCtrl:IntlkSirius-Mon') pvname = pvname.substitute(prefix=self.prefix) self._led_siriusintlk = SiriusLedAlert(self, pvname) self._led_siriusintlk.setStyleSheet( 'QLed{min-width:3em;min-height:3em;max-width:3em;max-height:3em;}') self._gbox_siriusintlk = self._create_groupbox('Sirius Interlock', self._led_siriusintlk) self._led_injsyssts = InjSysStbyLed(self) self._led_injsyssts.setStyleSheet( 'QLed{min-width:3em;min-height:3em;max-width:3em;max-height:3em;}') self._gbox_injsyssts = self._create_groupbox('Injection System', self._led_injsyssts) pvname = _PVName('SI-Glob:AP-SOFB:LoopState-Sts') pvname = pvname.substitute(prefix=self.prefix) self._led_sofbloop = SiriusLedState(self, pvname) self._led_sofbloop.setStyleSheet( 'QLed{min-width:3em;min-height:3em;max-width:3em;max-height:3em;}') self._led_sofbloop.offColor = SiriusLedState.Red self._gbox_sofbloop = self._create_groupbox('SOFB Loop', self._led_sofbloop) bbbdev_pref = _PVName('SI-Glob:DI-BbBProc-L') bbbdev_pref = bbbdev_pref.substitute(prefix=self.prefix) self._led_bbbloop = SiriusLedState( self, bbbdev_pref.substitute(propty_name='FBCTRL')) self._led_bbbloop.setStyleSheet( 'QLed{min-width:3em;min-height:3em;max-width:3em;max-height:3em;}') self._led_bbbloop.offColor = SiriusLedState.Red chs2vals = { bbbdev_pref.substitute(propty_name='CLKMISS'): 0, bbbdev_pref.substitute(propty_name='PLL_UNLOCK'): 0, bbbdev_pref.substitute(propty_name='DCM_UNLOCK'): 0, bbbdev_pref.substitute(propty_name='ADC_OVR'): 0, bbbdev_pref.substitute(propty_name='SAT'): 0, bbbdev_pref.substitute(propty_name='FID_ERR'): 0 } self._led_bbbsts = PyDMLedMultiChannel(self, chs2vals) self._led_bbbsts.setStyleSheet( 'QLed{min-width:3em;min-height:3em;max-width:3em;max-height:3em;}') self._led_bbbsts.offColor = SiriusLedState.Red self._gbox_bbbloop = self._create_groupbox( 'BbB Loop', [self._led_bbbloop, self._led_bbbsts], orientation='H') # current self.ld_curr = QLabel('<h3>Current [mA]</h3>', self, alignment=Qt.AlignCenter) self.ld_curr.setStyleSheet('max-height: 2em;') pvname = _PVName('SI-Glob:AP-CurrInfo:Current-Mon') pvname = pvname.substitute(prefix=self.prefix) self.lb_curr = PyDMLabel(self, pvname) self.lb_curr.setAlignment(Qt.AlignCenter) self.lb_curr.setStyleSheet('QLabel{background-color: ' + self.app_color + ';font-size: 45pt;}') pvname = _PVName('SI-Glob:AP-CurrInfo:StoredEBeam-Mon') pvname = pvname.substitute(prefix=self.prefix) self.frm_curr = SiriusFrame( self, pvname, color_list=[SiriusFrame.DarkGreen, SiriusFrame.LightGreen], is_float=False) self.frm_curr.borderWidth = 5 self.frm_curr.add_widget(self.lb_curr) box_curr = QWidget() lay_curr = QVBoxLayout(box_curr) lay_curr.setAlignment(Qt.AlignVCenter) lay_curr.addWidget(self.ld_curr) lay_curr.addWidget(self.frm_curr) self.ld_lifetime = QLabel('<h3>Lifetime</h3>', self, alignment=Qt.AlignCenter) self.ld_lifetime.setStyleSheet('max-height: 2em;') self.lb_lifetime = QLabel('0:00:00', self, alignment=Qt.AlignCenter) self.lb_lifetime.setStyleSheet('QLabel{font-size: 45pt;}') pvname = _PVName('SI-Glob:AP-CurrInfo:Lifetime-Mon') pvname = pvname.substitute(prefix=self.prefix) self.ch_lifetime = SiriusConnectionSignal(pvname) self.ch_lifetime.new_value_signal[float].connect( self.formatLifetimeLabel) box_lt = QWidget() lay_lt = QVBoxLayout(box_lt) lay_lt.setAlignment(Qt.AlignVCenter) lay_lt.addWidget(self.ld_lifetime) lay_lt.addWidget(self.lb_lifetime) self.tune_mon = SITuneMonitor(self, self.prefix, description='short', use_color_labels=False) self.tune_mon.lb_tunefrach.setStyleSheet('QLabel{font-size: 45pt;}') self.tune_mon.lb_tunefracv.setStyleSheet('QLabel{font-size: 45pt;}') self.curr_graph = SiriusTimePlot(self) self.curr_graph.setObjectName('curr_graph') self.curr_graph.setStyleSheet( '#curr_graph{min-width: 20em; min-height: 14em;}') self.curr_graph.showXGrid = True self.curr_graph.showYGrid = True self.curr_graph.backgroundColor = QColor(255, 255, 255) self.curr_graph.setYLabels(['Current [mA]']) for ax in self.curr_graph.getPlotItem().axes.values(): sty = ax['item'].labelStyle sty['font-size'] = '18pt' ax['item'].setLabel(text=None, **sty) font = QFont() font.setPointSize(18) self.curr_graph.plotItem.getAxis('bottom').setStyle( tickTextOffset=5, autoExpandTextSpace=False, tickTextWidth=50, tickFont=font) self.curr_graph.plotItem.getAxis('left').setStyle( tickTextOffset=5, autoExpandTextSpace=False, tickTextWidth=50, tickFont=font) curr_pvname = _PVName('SI-Glob:AP-CurrInfo:Current-Mon') curr_pvname = curr_pvname.substitute(prefix=self.prefix) self.curr_graph.addYChannel(y_channel=curr_pvname, name='Current', color='blue', lineStyle=Qt.SolidLine, lineWidth=2) self.curve = self.curr_graph.curveAtIndex(0) self.curve.setFillLevel(0) self.curve.setBrush(QBrush(QGradient(QGradient.ColdEvening))) timespan = 12 * 60 * 60 self.curr_graph.timeSpan = timespan self.curr_graph.bufferSize = timespan * 10 self.curr_graph.maxRedrawRate = 2 t_end = Time.now() t_init = t_end - timespan self.curr_graph.fill_curve_with_archdata(self.curve, curr_pvname, t_init=t_init.get_iso8601(), t_end=t_end.get_iso8601(), process_type='mean', process_bin_intvl=10) cw = QWidget() hlay1 = QHBoxLayout() hlay1.setSpacing(30) hlay1.setAlignment(Qt.AlignVCenter) hlay1.addWidget(box_curr) hlay1.addWidget(box_lt) hlay1.addWidget(self.tune_mon) hlay2 = QHBoxLayout() hlay2.setSpacing(14) hlay2.addWidget(self._gbox_siriusintlk) hlay2.addWidget(self._gbox_injsyssts) hlay2.addWidget(self._gbox_sofbloop) hlay2.addWidget(self._gbox_bbbloop) hlay2.setStretch(0, 1) hlay2.setStretch(1, 1) hlay2.setStretch(2, 1) hlay2.setStretch(3, 1) lay = QGridLayout(cw) lay.setVerticalSpacing(16) lay.setHorizontalSpacing(14) lay.addLayout(box_mach, 0, 1) lay.addLayout(hlay1, 1, 0, 1, 3) lay.addWidget(self.curr_graph, 2, 0, 1, 3) lay.addLayout(hlay2, 3, 0, 1, 3) lay.setRowStretch(0, 1) lay.setRowStretch(1, 2) lay.setRowStretch(2, 10) lay.setRowStretch(3, 2) lay.setColumnStretch(0, 1) lay.setColumnStretch(1, 1) lay.setColumnStretch(2, 1) self.setCentralWidget(cw)
def _setup_ui(self): # central widget self.central_widget = QWidget() self.setCentralWidget(self.central_widget) # tree gb_tree = QGroupBox('Select power supplies:') self.pwrsupplies_tree = PVNameTree(self._psnames, ('sec', 'mag_group'), tuple(), self) self.pwrsupplies_tree.tree.setHeaderHidden(True) self.pwrsupplies_tree.tree.setColumnCount(1) glay_tree = QVBoxLayout(gb_tree) glay_tree.addWidget(self.pwrsupplies_tree) # commands lb_prep_ti = QLabel('<h4>Prepare Timing</h4>', self, alignment=Qt.AlignCenter) ti_ch = [ PVName(name).substitute(prefix=VACA_PREFIX) for name in self._timing.get_pvnames_by_psnames() ] self.ticonn_led = PyDMLedMultiConn(self, channels=ti_ch) self.save_timing_bt = QPushButton('1. Save Timing Initial State', self) self.save_timing_bt.setToolTip( 'Save timing current state as initial state.') self.save_timing_bt.clicked.connect( _part(self._run_task, 'save_timing')) self.save_timing_bt.clicked.connect(self._set_lastcomm) self.prepare_timing_bt = QPushButton('2. Prepare Timing', self) self.prepare_timing_bt.setToolTip('Prepare EVG, triggers and events') self.prepare_timing_bt.clicked.connect(_part(self._run_task, 'timing')) self.prepare_timing_bt.clicked.connect(self._set_lastcomm) self.prepare_timing_lb = QLabel(self) self.prepare_timing_lb.setPixmap(self._pixmap_not) lb_prep_ps = QLabel('<h4>Prepare PS</h4>', self, alignment=Qt.AlignCenter) self.psconn_led = PyDMLedMultiConn(self) self.set_ps_sofbmode_off_bt = QPushButton('3. Turn off PS SOFBMode', self) self.set_ps_sofbmode_off_bt.setToolTip( 'Turn off power supplies SOFBMode.') self.set_ps_sofbmode_off_bt.clicked.connect( _part(self._run_task, 'ps_sofbmode')) self.set_ps_sofbmode_off_bt.clicked.connect(self._set_lastcomm) self.set_ps_sofbmode_off_lb = QLabel(self) self.set_ps_sofbmode_off_lb.setPixmap(self._pixmap_not) self.set_ps_opmode_slowref_bt = QPushButton( '4. Set PS OpMode to SlowRef', self) self.set_ps_opmode_slowref_bt.setToolTip( 'Set power supplies OpMode to SlowRef.') self.set_ps_opmode_slowref_bt.clicked.connect( _part(self._run_task, 'ps_om_slowref')) self.set_ps_opmode_slowref_bt.clicked.connect(self._set_lastcomm) self.set_ps_opmode_slowref_lb = QLabel(self) self.set_ps_opmode_slowref_lb.setPixmap(self._pixmap_not) self.set_ps_current_zero_bt = QPushButton('5. Set PS current to zero', self) self.set_ps_current_zero_bt.setToolTip( 'Set power supplies current to zero.') self.set_ps_current_zero_bt.clicked.connect( _part(self._run_task, 'ps_current')) self.set_ps_current_zero_bt.clicked.connect(self._set_lastcomm) self.set_ps_current_zero_lb = QLabel(self) self.set_ps_current_zero_lb.setPixmap(self._pixmap_not) self.prepare_ps_params_bt = QPushButton('6. Prepare PS Parameters', self) self.prepare_ps_params_bt.setToolTip( 'Check power supplies OpMode in SlowRef, check\n' 'current is zero and configure cycle parameters.') self.prepare_ps_params_bt.clicked.connect( _part(self._run_task, 'ps_params')) self.prepare_ps_params_bt.clicked.connect(self._set_lastcomm) self.prepare_ps_params_lb = QLabel(self) self.prepare_ps_params_lb.setPixmap(self._pixmap_not) self.prepare_ps_opmode_bt = QPushButton('7. Prepare PS OpMode', self) self.prepare_ps_opmode_bt.setToolTip( 'Set power supplies OpMode to Cycle.') self.prepare_ps_opmode_bt.clicked.connect( _part(self._run_task, 'ps_om_cycle')) self.prepare_ps_opmode_bt.clicked.connect(self._set_lastcomm) self.prepare_ps_opmode_lb = QLabel(self) self.prepare_ps_opmode_lb.setPixmap(self._pixmap_not) lb_cycle = QLabel('<h4>Cycle</h4>', self, alignment=Qt.AlignCenter) self.cycle_trims_bt = QPushButton('8. Cycle Trims', self) self.cycle_trims_bt.setToolTip( 'Cycle trims:\nStep 1) CH, QS and QTrims\nStep 2) CV') self.cycle_trims_bt.clicked.connect(_part(self._run_task, 'trims')) self.cycle_trims_bt.clicked.connect(self._set_lastcomm) self.cycle_trims_bt.setVisible(False) self.cycle_trims_lb = QLabel(self) self.cycle_trims_lb.setPixmap(self._pixmap_check) self.cycle_trims_lb.setVisible(False) self.cycle_bt = QPushButton('8. Cycle', self) self.cycle_bt.setToolTip( 'Check all configurations,\nenable triggers and run cycle.') self.cycle_bt.clicked.connect(_part(self._run_task, 'cycle')) self.cycle_bt.clicked.connect(self._set_lastcomm) self.cycle_bt.setEnabled(False) lb_rest_ti = QLabel('<h4>Restore Timing</h4>', self, alignment=Qt.AlignCenter) self.restore_timing_bt = QPushButton('9. Restore Timing Initial State', self) self.restore_timing_bt.setToolTip('Restore timing initial state.') self.restore_timing_bt.clicked.connect( _part(self._run_task, 'restore_timing')) self.restore_timing_bt.clicked.connect(self._set_lastcomm) self._prepared_labels = { 'timing': self.prepare_timing_lb, 'ps_sofbmode': self.set_ps_sofbmode_off_lb, 'ps_om_slowref': self.set_ps_opmode_slowref_lb, 'ps_current': self.set_ps_current_zero_lb, 'ps_params': self.prepare_ps_params_lb, 'ps_om_cycle': self.prepare_ps_opmode_lb, 'trims': self.cycle_trims_lb } gb_commsts = QGroupBox() gb_commsts.setStyleSheet(""" QPushButton{min-height:1.5em;} QLabel{qproperty-alignment: AlignCenter;}""") lay_commsts = QGridLayout(gb_commsts) lay_commsts.addItem( QSpacerItem(1, 1, QSzPlcy.Ignored, QSzPlcy.Expanding), 0, 0, 1, 2) lay_commsts.addWidget(lb_prep_ti, 1, 0) lay_commsts.addWidget(self.ticonn_led, 1, 1) lay_commsts.addWidget(self.save_timing_bt, 2, 0) lay_commsts.addWidget(self.prepare_timing_bt, 3, 0) lay_commsts.addWidget(self.prepare_timing_lb, 3, 1) lay_commsts.addItem( QSpacerItem(1, 1, QSzPlcy.Ignored, QSzPlcy.Expanding), 4, 0) lay_commsts.addWidget(lb_prep_ps, 5, 0) lay_commsts.addWidget(self.psconn_led, 5, 1) lay_commsts.addWidget(self.set_ps_sofbmode_off_bt, 6, 0) lay_commsts.addWidget(self.set_ps_sofbmode_off_lb, 6, 1) lay_commsts.addWidget(self.set_ps_opmode_slowref_bt, 7, 0) lay_commsts.addWidget(self.set_ps_opmode_slowref_lb, 7, 1) lay_commsts.addWidget(self.set_ps_current_zero_bt, 8, 0) lay_commsts.addWidget(self.set_ps_current_zero_lb, 8, 1) lay_commsts.addWidget(self.prepare_ps_params_bt, 9, 0) lay_commsts.addWidget(self.prepare_ps_params_lb, 9, 1) lay_commsts.addWidget(self.prepare_ps_opmode_bt, 10, 0) lay_commsts.addWidget(self.prepare_ps_opmode_lb, 10, 1) lay_commsts.addItem( QSpacerItem(1, 1, QSzPlcy.Ignored, QSzPlcy.Expanding), 11, 0) lay_commsts.addWidget(lb_cycle, 12, 0) lay_commsts.addWidget(self.cycle_trims_bt, 13, 0) lay_commsts.addWidget(self.cycle_trims_lb, 13, 1) lay_commsts.addWidget(self.cycle_bt, 14, 0) lay_commsts.addItem( QSpacerItem(1, 1, QSzPlcy.Ignored, QSzPlcy.Expanding), 15, 0) lay_commsts.addWidget(lb_rest_ti, 16, 0) lay_commsts.addWidget(self.restore_timing_bt, 17, 0) lay_commsts.addItem( QSpacerItem(1, 1, QSzPlcy.Ignored, QSzPlcy.Expanding), 18, 0) lay_commsts.setColumnStretch(0, 10) lay_commsts.setColumnStretch(1, 1) lay_commsts.setVerticalSpacing(12) lay_commsts.setHorizontalSpacing(6) self.label_lastcomm = QLabel('Last Command: ', self) self.clearhist_bt = QPushButton('Clear', self) self.clearhist_bt.clicked.connect(self._clear_lastcomm) lay_lc = QHBoxLayout() lay_lc.setContentsMargins(0, 0, 0, 0) lay_lc.addWidget(self.label_lastcomm, alignment=Qt.AlignLeft) lay_lc.addWidget(self.clearhist_bt, alignment=Qt.AlignRight) lay_lc.setStretch(0, 10) lay_lc.setStretch(1, 1) self.progress_list = QListWidget(self) self.progress_list.setObjectName('progresslist') self.progress_list.setStyleSheet('#progresslist{min-width:20em;}') self.progress_list.itemDoubleClicked.connect(self._open_ps_detail) self.progress_list.setSelectionMode(QAbstractItemView.MultiSelection) self.progress_list.setToolTip( 'Select rows and press Ctrl+C to copy and Esc to deselect.') self.progress_bar = MyProgressBar(self) lay_log = QVBoxLayout() lay_log.addLayout(lay_lc) lay_log.addWidget(self.progress_list) lay_log.addWidget(self.progress_bar) # connect tree signals self.pwrsupplies_tree.tree.doubleClicked.connect(self._open_ps_detail) self.pwrsupplies_tree.tree.itemChanged.connect( self._handle_checked_items_changed) self.pwrsupplies_tree.check_requested_levels(self._checked_accs) # layout layout = QGridLayout() layout.setVerticalSpacing(10) layout.setHorizontalSpacing(10) layout.addWidget( QLabel('<h3>PS Cycle</h3>', self, alignment=Qt.AlignCenter), 0, 0, 1, 3) layout.addWidget(gb_tree, 1, 0) layout.addWidget(gb_commsts, 1, 1) layout.addLayout(lay_log, 1, 2) layout.setRowStretch(0, 1) layout.setRowStretch(1, 15) layout.setColumnStretch(0, 5) layout.setColumnStretch(1, 4) layout.setColumnStretch(2, 8) self.central_widget.setLayout(layout)