def add_buttons_for_images(self): """.""" grpbx = QGroupBox('Other Graphs', self) gdl = QGridLayout(grpbx) gdl.setSpacing(2) self.hbl_nameh.addWidget(grpbx) btn = QPushButton('Corrs', grpbx) gdl.addWidget(btn, 0, 0) Window = create_window_from_widget(CorrectorsWidget, title='Correctors') _util.connect_window(btn, Window, self, device=self.device, prefix=self.prefix, acc=self.acc) if self.isring: btn = QPushButton('MTurn Orb', grpbx) gdl.addWidget(btn, 0, 1) Window = create_window_from_widget(MultiTurnWidget, title='Multi Turn') _util.connect_window(btn, Window, self, sigs=self.updater[0].raw_ref_sig, device=self.device, prefix=self.prefix, csorb=self._csorb) btn = QPushButton('MTurn Sum', grpbx) gdl.addWidget(btn, 0, 2) Window = create_window_from_widget(MultiTurnSumWidget, title='Multi Turn Sum') _util.connect_window(btn, Window, self, device=self.device, prefix=self.prefix, csorb=self._csorb) btn = QPushButton('SingPass Sum', grpbx) gdl.addWidget(btn, 0, 3) Window = create_window_from_widget(SinglePassSumWidget, title='Single Pass Sum') _util.connect_window(btn, Window, self, device=self.device, prefix=self.prefix, csorb=self._csorb)
def setupui(self): if self.position: text = 'Positions' names = ('X', 'Y', 'Q', 'SUM') colors = ('blue', 'red', 'green', 'black') else: text = 'Antennas' names = ('A', 'B', 'C', 'D') colors = ('blue', 'red', 'green', 'magenta') vbl = QVBoxLayout(self) graph = GraphWave(self, prefix=self.prefix, bpm=self.bpm, data_prefix=self.data_prefix) graph.setLabel('left', text='Amplitude', units='a.u.') graph.setLabel('bottom', text='Frequency', units='Hz') for name, cor in zip(names, colors): opts = dict(y_channel=self.get_pvname(name + 'FFTData-RB.AMP'), x_channel=self.get_pvname(name + 'FFTFreq-RB.AVAL'), name=text[:3] + name, color=cor, lineStyle=1, lineWidth=1) # NOTE: If > 1: very low performance graph.addChannel(**opts) vbl.addWidget(graph) graph = GraphWave(self, prefix=self.prefix, bpm=self.bpm, data_prefix=self.data_prefix) graph.setLabel('left', text='Phase', units='rad') graph.setLabel('bottom', text='Frequency', units='Hz') for name, cor in zip(names, colors): opts = dict(y_channel=self.get_pvname(name + 'FFTData-RB.PHA'), x_channel=self.get_pvname(name + 'FFTFreq-RB.AVAL'), name=text[:3] + name, color=cor, lineStyle=1, lineWidth=1) # NOTE: If > 1: very low performance graph.addChannel(**opts) vbl.addWidget(graph) hbl = QHBoxLayout() hbl.addStretch() vbl.addItem(hbl) pb = QPushButton('Open FFT Config', self) hbl.addWidget(pb) hbl.addStretch() Window = create_window_from_widget(FFTConfig, title=self.bpm + ': FFT Config') util.connect_window(pb, Window, parent=self, prefix=self.prefix, bpm=self.bpm, data_prefix=self.data_prefix, position=self.position)
def get_selection_lists_widget(self, parent): """.""" sel_wid = QWidget(parent) sel_lay = QHBoxLayout(sel_wid) icon = qta.icon('fa5s.hammer', color=get_appropriate_color(self.acc)) Window = create_window_from_widget( SelectionMatrix, title='Corrs and BPMs selection', icon=icon) btn = QPushButton('', sel_wid) btn.setObjectName('btn') btn.setIcon(qta.icon('fa5s.tasks')) btn.setToolTip('Open window to select BPMs and correctors') btn.setStyleSheet( '#btn{min-width:3.8em; max-width:3.8em;\ min-height:2em; max-height:2em; icon-size:25px;}') connect_window( btn, Window, None, device=self.device, prefix=self.prefix, acc=self.acc) sel_lay.addWidget(btn) lay = QVBoxLayout() sel_lay.addStretch() sel_lay.addLayout(lay) hlay = QHBoxLayout() lay.addLayout(hlay) hlay.addWidget(SiriusEnumComboBox( sel_wid, self.devpref.substitute(propty='RespMatMode-Sel'))) hlay.addWidget(SiriusLabel( sel_wid, self.devpref.substitute(propty='RespMatMode-Sts'))) if self.acc in {'SI', 'BO'}: hlay = QHBoxLayout() lay.addLayout(hlay) pdm_chbx = PyDMCheckbox( sel_wid, self.devpref.substitute(propty='RFEnbl-Sel')) pdm_chbx.setText('use RF') pdm_led = SiriusLedState( sel_wid, self.devpref.substitute(propty='RFEnbl-Sts')) hlay.addWidget(pdm_chbx) hlay.addWidget(pdm_led) btn = QPushButton('', sel_wid) btn.setToolTip('Visualize RespMat') btn.setIcon(qta.icon('mdi.chart-line')) btn.setObjectName('btn') btn.setStyleSheet('#btn{max-width:40px; icon-size:40px;}') connect_newprocess( btn, [f'sirius-hla-{self.acc.lower():s}-ap-sofb.py', '--matrix']) sel_lay.addWidget(btn) return sel_wid
def _applyconfig(self): sender_text = self.sender().text() if 'Standby' in sender_text: config_name = 'standby' elif 'TurnOff' in sender_text: config_name = 'turnoff' ans = QMessageBox.question( self, 'Are you Sure?', "Do you really want to apply the Configuration '" + config_name + "' to the machine?", QMessageBox.Yes, QMessageBox.Cancel) if ans != QMessageBox.Yes: return current, ok = QInputDialog.getDouble( self, 'Enter value: ', 'Enter FilaPS standby current [A]\n' 'or cancel to not set it: ', value=0.7, min=0.0, max=1.5, decimals=3) if ok: fila_pv = _PV(_prefix + 'LI-01:EG-FilaPS:currentoutsoft', connection_timeout=0.05) fila_pv.get() # force connection if fila_pv.connected: fila_pv.put(current) else: QMessageBox.warning( self, 'Message', 'Could not connect to LI-01:EG-FilaPS!') client = ConfigDBClient() WinClass = create_window_from_widget( SelectAndApplyPVsWidget, 'Select PVs to Apply Standby') wind = WinClass(self, client) wind.widget.settingFinished.connect(wind.close) wind.widget.fill_config('global_config', config_name) wind.exec_()
def get_singular_values_widget(self, parent): """.""" svs_wid = QWidget(parent) svs_lay = QGridLayout(svs_wid) wid = self.create_pair(svs_wid, 'MinSingValue') lbl = QLabel('Min. SV: ') svs_lay.addWidget(lbl, 0, 0) svs_lay.addWidget(wid, 0, 1) wid = self.create_pair(svs_wid, 'TikhonovRegConst') lbl = QLabel('Tikhonov: ') svs_lay.addWidget(lbl, 1, 0) svs_lay.addWidget(wid, 1, 1) lbl = QLabel('Nr Sing Vals') lbls = SiriusLabel( svs_wid, self.devpref.substitute(propty='NrSingValues-Mon')) btn = QPushButton('', svs_wid) btn.setToolTip('Check Singular Values') btn.setIcon(qta.icon('mdi.chart-line')) btn.setObjectName('btn') btn.setStyleSheet('#btn{max-width:30px; icon-size:30px;}') hbl = QHBoxLayout() hbl.addWidget(btn) hbl.addStretch() hbl.addWidget(lbl) hbl.addWidget(lbls) svs_lay.addLayout(hbl, 2, 0, 1, 2) Window = create_window_from_widget( SingularValues, title='Check Singular Values') connect_window( btn, Window, svs_wid, device=self.device, prefix=self.prefix) return svs_wid
import sys import argparse as _argparse import qtawesome as qta from siriuspy.envars import VACA_PREFIX from siriushla.util import get_appropriate_color from siriushla.sirius_application import SiriusApplication from siriushla.as_ap_monitor import SiriusMonitor from siriushla.widgets.windows import create_window_from_widget parser = _argparse.ArgumentParser(description="Run Sirius Monitor Interface.") parser.add_argument('-p', "--prefix", type=str, default=VACA_PREFIX, help="Define the prefix for the PVs in the window.") args = parser.parse_args() app = SiriusApplication() color = get_appropriate_color(section='AS') icon = qta.icon('mdi.monitor-dashboard', color=color) window = create_window_from_widget(SiriusMonitor, title='Sirius Monitor', icon=icon, is_main=True, withscroll=True, min_width=96) app.open_window(window, parent=None, prefix=args.prefix) sys.exit(app.exec_())
parser = _argparse.ArgumentParser( description="Run Interface of Specified Screen.") parser.add_argument('scrn_sel', type=str, help='Select a section.') parser.add_argument('-p', "--prefix", type=str, default=VACA_PREFIX, help="Define the prefix for the PVs in the window.") args = parser.parse_args() os.environ['EPICS_CA_MAX_ARRAY_BYTES'] = '200000000' app = SiriusApplication() scrn_sel = PVName(args.scrn_sel) prefix = args.prefix if scrn_sel.dev == 'Scrn': window = create_window_from_widget(IndividualScrn, title='Screen View: ' + scrn_sel, is_main=True) kwargs = dict(prefix=prefix, scrn=scrn_sel) else: window = create_window_from_widget(SelectScrns, title='Select a Screen', is_main=True) kwargs = dict(prefix=prefix, sec=scrn_sel) app.open_window(window, parent=None, **kwargs) sys.exit(app.exec_())
def _acquisitionWidget(self): label_CamEnbl = QLabel('Acquire Enable Status:', self) hbox_CamEnbl = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='Enbl', propty_type='enbldisabl') label_FrameCnt = QLabel('Frame Count:', self) hbox_FrameCnt = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='FrameCnt', propty_type='mon') label_AcqMode = QLabel('Acquire Mode:', self) hbox_AcqMode = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='AcqMode', propty_type='enum') label_AcqPeriod = QLabel('Acquire Period [s]:', self) hbox_AcqPeriod = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='AcqPeriod', propty_type='sprb') label_AcqPeriodLowLim = QLabel('Acquire Period Low Limit [s]:', self) hbox_AcqPeriodLowLim = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='AcqPeriodLowLim', propty_type='sprb') label_ExpMode = QLabel('Exposure Mode:', self) hbox_ExpMode = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='ExposureMode', propty_type='enum') label_ExpTime = QLabel('Exposure Time [us]:', self) hbox_ExpTime = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='ExposureTime', propty_type='sprb') label_Gain = QLabel('Gain [dB]:', self) hbox_Gain = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='Gain', propty_type='sprb', cmd={ 'label': '', 'pressValue': 1, 'width': '25', 'height': '25', 'icon': qta.icon('mdi.auto-fix'), 'icon-size': '20', 'toolTip': 'Auto Gain', 'name': 'AutoGain' }) label_TransformType = QLabel('Transform Type:', self) hbox_TransformType = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='TransformType', propty_type='enum') label_BlackLevel = QLabel('Black Level [gray va]:', self) hbox_BlackLevel = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='BlackLevel', propty_type='sprb') label_DebouncerPeriod = QLabel('Debouncer Period [us]:', self) hbox_DebouncerPeriod = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='DebouncerPeriod', propty_type='sprb') self.pb_advanced = QPushButton('Advanced', self) my_window = create_window_from_widget( BaslerCamAcqAdvSettings, is_main=False, title='Basler Camera Advanced Acquisition Settings') util.connect_window(self.pb_advanced, my_window, parent=self, device=self.device, prefix=self.prefix) hbox_adv = QHBoxLayout() hbox_adv.addWidget(self.pb_advanced, alignment=Qt.AlignRight) wid = QWidget() flay = QFormLayout(wid) flay.setLabelAlignment(Qt.AlignRight) flay.setFormAlignment(Qt.AlignHCenter) flay.addRow(label_CamEnbl, hbox_CamEnbl) flay.addRow(label_FrameCnt, hbox_FrameCnt) flay.addRow(label_AcqMode, hbox_AcqMode) flay.addRow(label_AcqPeriod, hbox_AcqPeriod) flay.addRow(label_AcqPeriodLowLim, hbox_AcqPeriodLowLim) flay.addRow(label_ExpMode, hbox_ExpMode) flay.addRow(label_ExpTime, hbox_ExpTime) flay.addRow(label_Gain, hbox_Gain) flay.addRow(label_BlackLevel, hbox_BlackLevel) flay.addRow(label_DebouncerPeriod, hbox_DebouncerPeriod) flay.addRow(label_TransformType, hbox_TransformType) flay.addRow(hbox_adv) return wid
def setupui(self): vbl = QVBoxLayout(self) self.stack = QStackedWidget(self) vbl.addWidget(self.stack) rbA = QRadioButton('Antennas', self) rbP = QRadioButton('Positions', self) rbA.toggled.connect(_part(self.toggle_button, 0)) rbP.toggled.connect(_part(self.toggle_button, 1)) self.radio_buttons.append(rbA) self.radio_buttons.append(rbP) rbA.setChecked(True) hbl = QHBoxLayout() hbl.addStretch() hbl.addWidget(rbA) hbl.addStretch() hbl.addWidget(rbP) hbl.addStretch() vbl.addItem(hbl) # ##### Antennas Widget ###### stack1 = QWidget(self.stack) self.stack.addWidget(stack1) vbl = QVBoxLayout(stack1) graph = self.create_graph(stack1, False) vbl.addWidget(graph) stats = self.create_statistics(stack1, False) vbl.addWidget(stats) if not self.data_prefix.startswith('PM'): hbl2 = QHBoxLayout() hbl2.addStretch() vbl.addItem(hbl2) pb = QPushButton('Open FFT Data', stack1) hbl2.addWidget(pb) hbl2.addStretch() Window = create_window_from_widget( FFTData, title=self.bpm+': FFT Data') util.connect_window( pb, Window, parent=stack1, prefix=self.prefix, bpm=self.bpm, data_prefix=self.data_prefix, position=False) # ##### Position Widget ###### stack2 = QWidget(self.stack) self.stack.addWidget(stack2) vbl = QVBoxLayout(stack2) graph = self.create_graph(stack2, True) vbl.addWidget(graph) stats = self.create_statistics(stack2, True) vbl.addWidget(stats) if not self.data_prefix.startswith('PM'): hbl2 = QHBoxLayout() hbl2.addStretch() vbl.addItem(hbl2) pb = QPushButton('Open FFT Data', stack2) hbl2.addWidget(pb) hbl2.addStretch() Window = create_window_from_widget( FFTData, title=self.bpm+': FFT Data') util.connect_window( pb, Window, parent=stack1, prefix=self.prefix, bpm=self.bpm, data_prefix=self.data_prefix, position=True) self.setStyleSheet(""" #MultiTurnDataGraph{ min-width:48em; min-height:24em; } QLabel{ min-width:6em; max-width:6em; min-height:1.5em; max-height:1.5em; }""")
from siriuspy.envars import VACA_PREFIX parser = _argparse.ArgumentParser(description="Run SOFB HLA Interface.") parser.add_argument('-p', "--prefix", type=str, default=VACA_PREFIX, help="Define the prefix for the PVs in the window.") parser.add_argument('-m', '--matrix', action='store_true', default=False, help="Choose whether to show matrix widget") args = parser.parse_args() app = SiriusApplication() if args.matrix: window = create_window_from_widget( ShowMatrixWidget, 'Response Matrix', icon=qta.icon('fa5s.hammer', color=util.get_appropriate_color('TB')), is_main=True) app.open_window(window, parent=None, device='TB-Glob:AP-SOFB', prefix=args.prefix, acc='TB') else: app.open_window(MainWindow, parent=None, prefix=args.prefix, acc='TB') sys.exit(app.exec_())
help="Show Antennas or Positions (default= 'Positions').", choices=('Positions', 'Antennas')) parser.add_argument('-p', "--prefix", type=str, default=VACA_PREFIX, help="Define the prefix for the PVs in the window.") args = parser.parse_args() app = SiriusApplication() pv = _PVName(args.bpm_sel) kwargs = dict() if pv.dev in ('BPM', 'PBPM'): icon = qta.icon('mdi.currency-sign', color=get_appropriate_color(pv.sec)) window = create_window_from_widget(BPMMain, title=args.bpm_sel, is_main=True, icon=icon) kwargs.update(dict(prefix=args.prefix, bpm=pv)) else: sec = args.bpm_sel.upper() bpms_names = BPMSearch.get_names(filters={'sec': sec, 'dev': 'BPM'}) icon = qta.icon('mdi.currency-sign', color=get_appropriate_color(sec)) if args.window == 'Monitor': clas = SelectBPMs icon = get_monitor_icon('mdi.currency-sign', color=get_appropriate_color(sec)) elif args.window == 'SPass': clas = SinglePassSummary else: clas = MultiTurnSummary kwargs['mode'] = args.mode
#!/usr/bin/env python-sirius """PS Monitor.""" import sys import argparse as _argparse from siriushla.sirius_application import SiriusApplication from siriuspy.envars import VACA_PREFIX from siriushla.as_ps_diag import PSMonitor from siriushla.widgets.windows import create_window_from_widget parser = _argparse.ArgumentParser(description="Run PS Monitor Interface.") parser.add_argument('-p', "--prefix", type=str, default=VACA_PREFIX, help="Define the prefix for the PVs in the window.") args = parser.parse_args() app = SiriusApplication() window = create_window_from_widget(PSMonitor, title='PS & PU Monitor', is_main=True, withscroll=True, min_width=56) app.open_window(window, parent=None, prefix=args.prefix) sys.exit(app.exec_())
def _get_acq_commom_params_grpbx(self): grp_bx = QGroupBox('Common Parameters', self) fbl = QFormLayout(grp_bx) lbl = QLabel('Non-linear Corr.', grp_bx, alignment=Qt.AlignCenter) wid = self.create_pair_butled(grp_bx, 'PolyCalibration') fbl.addRow(lbl, wid) self._set_detailed([lbl, wid]) lbl = QLabel('Channel Rate', grp_bx, alignment=Qt.AlignCenter) wid = self.create_pair_sel(grp_bx, 'TrigAcqChan') fbl.addRow(lbl, wid) lbl = QLabel('Trigger Type', grp_bx, alignment=Qt.AlignCenter) wid = self.create_pair_sel(grp_bx, 'TrigAcqTrigger') fbl.addRow(lbl, wid) self._set_detailed([lbl, wid]) lbl = QLabel('Repeat', grp_bx, alignment=Qt.AlignCenter) wid = self.create_pair_butled(grp_bx, 'TrigAcqRepeat') fbl.addRow(lbl, wid) self._set_detailed([lbl, wid]) if self.isring: lbl = QLabel('Nr of Shots', grp_bx, alignment=Qt.AlignCenter) wid = self.create_pair(grp_bx, 'TrigNrShots') fbl.addRow(lbl, wid) self._set_detailed([lbl, wid]) lbl = QLabel('SamplesPre', grp_bx, alignment=Qt.AlignCenter) wid = self.create_pair(grp_bx, 'TrigNrSamplesPre') fbl.addRow(lbl, wid) lbl = QLabel('SamplesPost', grp_bx, alignment=Qt.AlignCenter) wid = self.create_pair(grp_bx, 'TrigNrSamplesPost') fbl.addRow(lbl, wid) lbl = QLabel('Acquisition:', grp_bx, alignment=Qt.AlignCenter) strt = PyDMPushButton( grp_bx, label='', init_channel=self.devpref.substitute(propty='TrigAcqCtrl-Sel'), pressValue=self._csorb.TrigAcqCtrl.Start) strt.setToolTip('Start Acquisition') strt.setIcon(qta.icon('fa5s.play')) strt.setObjectName('strt') strt.setStyleSheet( '#strt{min-width:25px; max-width:25px; icon-size:20px;}') stop = PyDMPushButton( grp_bx, label='', init_channel=self.devpref.substitute(propty='TrigAcqCtrl-Sel'), pressValue=self._csorb.TrigAcqCtrl.Stop) stop.setToolTip('Stop Acquisition') stop.setIcon(qta.icon('fa5s.stop')) stop.setObjectName('stop') stop.setStyleSheet( '#stop{min-width:25px; max-width:25px; icon-size:20px;}') abrt = PyDMPushButton( grp_bx, label='', init_channel=self.devpref.substitute(propty='TrigAcqCtrl-Sel'), pressValue=self._csorb.TrigAcqCtrl.Abort) abrt.setToolTip('Abort Acquisition') abrt.setIcon(qta.icon('fa5s.ban')) abrt.setObjectName('abrt') abrt.setStyleSheet( '#abrt{min-width:25px; max-width:25px; icon-size:20px;}') pdmlbl = PyDMLabel(grp_bx, self.devpref.substitute(propty='TrigAcqCtrl-Sts')) pdmlbl.setObjectName('pdmlbl') pdmlbl.setStyleSheet('#pdmlbl{min-width:6em; max-width:6em;}') pdmlbl.setAlignment(Qt.AlignCenter) hbl = QHBoxLayout() fbl.addRow(hbl) hbl.addStretch() hbl.addWidget(lbl) hbl.addWidget(strt) hbl.addWidget(stop) hbl.addWidget(abrt) hbl.addWidget(pdmlbl) conf = PyDMPushButton( grp_bx, pressValue=1, init_channel=self.devpref.substitute(propty='TrigAcqConfig-Cmd')) conf.setToolTip('Resend Configurations') conf.setIcon(qta.icon('fa5s.sync')) conf.setObjectName('conf') conf.setStyleSheet( '#conf{min-width:25px; max-width:25px; icon-size:20px;}') sts = QPushButton('', grp_bx) sts.setIcon(qta.icon('fa5s.list-ul')) sts.setToolTip('Open Detailed Status View') sts.setObjectName('sts') sts.setStyleSheet( '#sts{min-width:25px; max-width:25px; icon-size:20px;}') Window = create_window_from_widget(StatusWidget, title='Orbit Status') connect_window(sts, Window, grp_bx, device=self.device, prefix=self.prefix, acc=self.acc, is_orb=True) pdm_led = SiriusLedAlert( grp_bx, self.devpref.substitute(propty='OrbStatus-Mon')) lbl = QLabel('Status:', grp_bx) hbl = QHBoxLayout() hbl.setSpacing(9) hbl.addStretch() hbl.addWidget(lbl) hbl.addWidget(pdm_led) hbl.addWidget(sts) hbl.addWidget(conf) fbl.addRow(hbl) return grp_bx
#!/usr/bin/env python-sirius """Linac MPS Monitor.""" import sys import argparse as _argparse from siriushla.sirius_application import SiriusApplication from siriuspy.envars import VACA_PREFIX from siriushla.widgets.windows import create_window_from_widget from siriushla.li_ap_mps import MPSMonitor parser = _argparse.ArgumentParser( description="Run Linac MPS Monitor Interface.") parser.add_argument('-p', "--prefix", type=str, default=VACA_PREFIX, help="Define the prefix for the PVs in the window.") args = parser.parse_args() app = SiriusApplication() window = create_window_from_widget(MPSMonitor, title='LI MPS Monitor', is_main=True, withscroll=True, min_width=25) app.open_window(window, parent=None, prefix=args.prefix) sys.exit(app.exec_())
def setupui(self): self.layoutv = QVBoxLayout(self) lab = QLabel('<h2>' + self.bpm + '</h2>', self, alignment=Qt.AlignCenter) self.layoutv.addWidget(lab) self.layoutv.addSpacing(30) grpbx = CustomGroupBox('BPM General Status', self) hbl = QHBoxLayout(grpbx) hbl.addSpacing(10) hbl.addStretch() chan2vals = { 'asyn.CNCT': 1, 'asyn.ENBL': 1, 'RFFEasyn.CNCT': 1, 'RFFEasyn.ENBL': 1, 'ADCAD9510PllStatus-Mon': 1 } chan2vals = {self.get_pvname(k): v for k, v in chan2vals.items()} led = PyDMLedMultiChannel(self, channels2values=chan2vals) hbl.addWidget(led) hbl.addSpacing(10) hbl.addStretch() pbt = QPushButton('Open Settings') Window = create_window_from_widget(ParamsSettings, title=self.bpm + ': Settings') util.connect_window(pbt, Window, parent=grpbx, prefix=self.prefix, bpm=self.bpm) hbl.addWidget(pbt) hbl.addSpacing(10) hbl.addStretch() self.layoutv.addWidget(grpbx) self.layoutv.addSpacing(20) self.layoutv.addStretch() grpbx = CustomGroupBox('Triggered Acquisitions', self) hbl = QHBoxLayout(grpbx) hbl.addSpacing(10) hbl.addStretch() pbt = QPushButton('MultiBunch/SinglePass') Window = create_window_from_widget( TriggeredAcquisition, title=self.bpm + ': MultiBunch/SinglePass Acquisitions') util.connect_window(pbt, Window, parent=grpbx, prefix=self.prefix, bpm=self.bpm) hbl.addWidget(pbt) hbl.addSpacing(10) hbl.addStretch() pbt = QPushButton('PostMortem') Window = create_window_from_widget(PostMortemAcquisition, title=self.bpm + ': PostMortem Acquisitions') util.connect_window(pbt, Window, parent=grpbx, prefix=self.prefix, bpm=self.bpm) hbl.addWidget(pbt) hbl.addSpacing(10) hbl.addStretch() self.layoutv.addWidget(grpbx) self.layoutv.addSpacing(20) self.layoutv.addStretch() grpbx = self._create_formlayout_groupbox('Monitoring', (('PosX-Mon', 'Position X'), ('PosY-Mon', 'Position Y'), ('PosQ-Mon', 'Position Q'), ('Sum-Mon', 'Sum'))) hbl = QHBoxLayout() hbl.addStretch() pbt = QPushButton('Open Graphics', grpbx) hbl.addWidget(pbt) hbl.addStretch() Window = create_window_from_widget(MonitData, title=self.bpm + ': Monit Data') util.connect_window(pbt, Window, parent=grpbx, prefix=self.prefix, bpm=self.bpm) grpbx.layoutf.addRow(hbl) grpbx.layoutf.setSpacing(10) self.layoutv.addWidget(grpbx) self.layoutv.addSpacing(20) self.layoutv.addStretch() if 'SI' in self.bpm: grpbx = CustomGroupBox('Orbit Interlock', self) hbl = QHBoxLayout(grpbx) pbt = QPushButton('Open Interlock Settings', grpbx) util.connect_window(pbt, BPMOrbIntlkDetailWindow, parent=grpbx, prefix=self.prefix, device=self.bpm) hbl.addStretch() hbl.addWidget(pbt) hbl.addStretch() self.layoutv.addWidget(grpbx) self.layoutv.addSpacing(20) self.layoutv.addStretch()
from siriushla.as_ti_control import TimingMain, MonitorWindow from siriushla.util import get_appropriate_color, get_monitor_icon parser = _argparse.ArgumentParser(description="Run Timing HLA Interface.") parser.add_argument('-p', "--prefix", type=str, default=VACA_PREFIX, help="Define the prefix for the PVs in the window.") parser.add_argument('-t', "--type", type=str, default='main', choices=('main', 'monitor'), help="Whether to open monitor window.") args = parser.parse_args() app = SiriusApplication(None, sys.argv) if args.type.lower() == 'main': app.open_window(TimingMain, parent=None, prefix=args.prefix) else: icon = get_monitor_icon('mdi.timer', color=get_appropriate_color('AS')) window = create_window_from_widget(MonitorWindow, title='Timing Monitor', icon=icon, is_main=True, withscroll=True, min_width=25) app.open_window(window, parent=None, prefix=args.prefix) sys.exit(app.exec_())
#!/usr/bin/env python-sirius """IT Timing Application.""" import sys as _sys import argparse as _argparse from siriuspy.envars import VACA_PREFIX import qtawesome as qta from siriushla.sirius_application import SiriusApplication from siriushla.widgets.windows import create_window_from_widget from siriushla.li_eg_control import ITTIWidget parser = _argparse.ArgumentParser(description="Run IT Timing Interface.") parser.add_argument('-p', "--prefix", type=str, default=VACA_PREFIX, help="Define the prefix for the PVs in the window.") args = parser.parse_args() prefix = args.prefix + ('-' if args.prefix else '') app = SiriusApplication() window = create_window_from_widget(ITTIWidget, title='IT Timing Control', icon=qta.icon('mdi.timer'), is_main=True) app.open_window(window, parent=None, prefix=prefix, is_main=True) _sys.exit(app.exec_())
#!/usr/bin/env python-sirius """Open Window of emittance measurement in Linac.""" import sys import argparse as _argparse from siriushla.sirius_application import SiriusApplication from siriuspy.envars import VACA_PREFIX from siriushla.as_ap_measure import EmittanceMeasure from siriushla.widgets.windows import create_window_from_widget parser = _argparse.ArgumentParser( description="Run Interface of emittance measurement in Linac.") parser.add_argument('-p', "--prefix", type=str, default=VACA_PREFIX, help="Define the prefix for the PVs in the window.") args = parser.parse_args() app = SiriusApplication() MyWindow = create_window_from_widget(EmittanceMeasure, title='Linac Emittance Measure', is_main=True) app.open_window(MyWindow, parent=None, place='LI') sys.exit(app.exec_())
#!/usr/bin/env python-sirius """RAD Monitor.""" import sys as sys import argparse as argparse import qtawesome as qta from siriushla.util import get_appropriate_color from siriuspy.envars import VACA_PREFIX from siriushla.sirius_application import SiriusApplication from siriushla.as_ap_radmon import RadTotDoseMonitor from siriushla.widgets.windows import create_window_from_widget parser = argparse.ArgumentParser(description="Run RAD Monitor.") parser.add_argument('-p', "--prefix", type=str, default=VACA_PREFIX, help="Define the prefix for the PVs in the window.") args = parser.parse_args() app = SiriusApplication() icon = qta.icon('fa5s.radiation', color=get_appropriate_color('AS')) window = create_window_from_widget(RadTotDoseMonitor, 'RAD: Total Dose Monitor', is_main=True, withscroll=True, icon=icon) app.open_window(window, parent=None, prefix=args.prefix) sys.exit(app.exec_())
def _setupUi(self): lay = QVBoxLayout() lay.addWidget( QLabel('<h3>Settings</h3>', self, alignment=Qt.AlignHCenter | Qt.AlignBottom)) lay.setStretch(0, 1) # Measure l_reliablemeas = QLabel('Reliability: ') self.led_ReliableMeas = SiriusLedAlert( self, self.dcct_prefix.substitute(propty='ReliableMeas-Mon')) l_curr = QLabel('Current [mA]: ', self, alignment=Qt.AlignRight) self.label_current = PyDMLabel( self, self.dcct_prefix.substitute(propty='Current-Mon')) self.led_StoredEBeam = SiriusLedState( self, self.dcct_prefix.substitute(propty='StoredEBeam-Mon')) hlay_current = QHBoxLayout() hlay_current.addWidget(self.label_current) hlay_current.addWidget(self.led_StoredEBeam) 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) if 'SI' in self.device: 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) hlay_range.setContentsMargins(0, 0, 0, 0) 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) hlay_measmode.setContentsMargins(0, 0, 0, 0) glay_mode = QGridLayout() self.normalmode_widget = self._setupMeasSettingsWidget('Normal') self.fastmode_widget = self._setupMeasSettingsWidget('Fast') glay_mode.addWidget(self.normalmode_widget, 0, 0) glay_mode.addWidget(self.fastmode_widget, 0, 0) glay_mode.setContentsMargins(0, 0, 0, 0) self.mode_channel = SiriusConnectionSignal( self.dcct_prefix.substitute(propty='MeasMode-Sel')) self.mode_channel.new_value_signal.connect(self._showMeasModeSettings) # Details self.pb_details = QPushButton(qta.icon('fa5s.ellipsis-h'), '', self) self.pb_details.setToolTip('Open details') self.pb_details.setObjectName('detail') self.pb_details.setStyleSheet( "#detail{min-width:25px; max-width:25px; icon-size:20px;}") detail_window = create_window_from_widget(DCCTSettingsDetails, title=self.device + ' Settings Details') _hlautil.connect_window(self.pb_details, detail_window, self, prefix=self.prefix, device=self.device) gbox_gen = QGroupBox('Measure') glay_gen = QGridLayout(gbox_gen) glay_gen.setAlignment(Qt.AlignVCenter) glay_gen.addWidget(l_curr, 0, 0) glay_gen.addLayout(hlay_current, 0, 1) glay_gen.addWidget(l_reliablemeas, 1, 0) glay_gen.addWidget(self.led_ReliableMeas, 1, 1, alignment=Qt.AlignLeft) glay_gen.addWidget(l_enbl, 2, 0) glay_gen.addLayout(hlay_enbl, 2, 1) glay_gen.addWidget(l_meastrig, 3, 0) glay_gen.addLayout(hlay_meastrig, 3, 1) if 'SI' in self.device: glay_gen.addWidget(l_range, 4, 0) glay_gen.addLayout(hlay_range, 4, 1) glay_gen.addWidget(l_measmode, 5, 0) glay_gen.addLayout(hlay_measmode, 5, 1) glay_gen.addLayout(glay_mode, 6, 0, 1, 2) glay_gen.addWidget(self.pb_details, 7, 0, 1, 2, alignment=Qt.AlignRight) gbox_gen.setStyleSheet(""" .QLabel{ qproperty-alignment: 'AlignVCenter | AlignRight'; min-width: 6em;} PyDMLed{ min-width: 6em;}""") lay.addWidget(gbox_gen) lay.setStretch(1, 7) # Trigger self.trigger_widget = QGroupBox('Trigger') hbl = QHBoxLayout(self.trigger_widget) hbl.addWidget( HLTriggerSimple(self.trigger_widget, device=self.device.substitute(dis='TI'), prefix=self.prefix)) lay.addWidget(self.trigger_widget) lay.setStretch(2, 3) self.setLayout(lay) self.setStyleSheet(""" QSpinBox, QComboBox, QPushButton, PyDMSpinbox, PyDMEnumComboBox, PyDMLabel{ min-width:6em; max-width:6em;} .QLabel{max-height:1.5em;}""")
def setupui(self): gdl = QGridLayout(self) lab = QLabel('<h2>' + self.bpm + ' Advanced Settings</h2>') lab.setAlignment(Qt.AlignCenter) gdl.addWidget(lab, 0, 0, 1, 2) grpbx = self._create_formlayout_groupbox( 'Monit', (('MonitEnable-Sel', 'Enable'), ('MONITUpdtTime-SP', 'Update Time'))) gdl.addWidget(grpbx, 1, 0) grpbx = self._create_formlayout_groupbox( 'Switching', (('SwMode-Sel', 'Mode'), ('SwTagEn-Sel', 'Tag Enable'), ('SwDataMaskEn-Sel', 'Data Mask Enable'), ('SwDataMaskSamples-SP', 'Data Mask Samples'), ('SwDly-SP', 'Delay'), ('SwDivClk-SP', 'Division Clock'))) gdl.addWidget(grpbx, 2, 0) grpbx = self._create_formlayout_groupbox( 'RFFE', (('RFFEAtt-SP', 'Attenuation'), ('RFFEPidSpAC-SP', 'Pid Setpoint AC'), ('RFFEPidSpBD-SP', 'Pid Setpoint BD'), ('RFFEHeaterAC-SP', 'Heater AC'), ('RFFEHeaterBD-SP', 'Heater BD'), ('RFFEPidACKp-SP', 'Pid AC Kp'), ('RFFEPidBDKp-SP', 'Pid BD Kp'), ('RFFEPidACTi-SP', 'Pid AC Ti'), ('RFFEPidBDTi-SP', 'Pid BD Ti'), ('RFFEPidACTd-SP', 'Pid AC Td'), ('RFFEPidBDTd-SP', 'Pid BD Td'))) gdl.addWidget(grpbx, 1, 1, 2, 1) grpbx = CustomGroupBox('Triggers Configuration', self) hbl = QHBoxLayout(grpbx) hbl.setSpacing(10) hbl.addStretch() pbt = QPushButton('Physical Triggers') Window = create_window_from_widget(PhysicalTriggers, title=self.bpm + ': Physical Triggers') util.connect_window(pbt, Window, parent=grpbx, prefix=self.prefix, bpm=self.bpm) hbl.addWidget(pbt) hbl.addStretch() pbt = QPushButton('ACQ Logical Triggers') Window = create_window_from_widget(LogicalTriggers, title=self.bpm + ': ACQ Logical Triggers') util.connect_window(pbt, Window, parent=grpbx, prefix=self.prefix, bpm=self.bpm, trig_tp='') hbl.addWidget(pbt) hbl.addStretch() pbt = QPushButton('Post-Mortem Logical Triggers') Window = create_window_from_widget(LogicalTriggers, title=self.bpm + ': Post-Mortem Logical Triggers') util.connect_window(pbt, Window, parent=grpbx, prefix=self.prefix, bpm=self.bpm, trig_tp='_PM') hbl.addWidget(pbt) hbl.addStretch() gdl.addWidget(grpbx, 3, 0, 1, 2)
"""Open Window of energy measurement in LI.""" import os import sys import argparse as _argparse import qtawesome as qta from siriuspy.envars import VACA_PREFIX import siriushla.util as _util from siriushla.sirius_application import SiriusApplication from siriushla.as_ap_measure import EnergyMeasure from siriushla.widgets.windows import create_window_from_widget # Linac image is very large! (2448 X 2050) os.environ['EPICS_CA_MAX_ARRAY_BYTES'] = '21000000' parser = _argparse.ArgumentParser( description="Run Interface of energy measurement in LI.") parser.add_argument( '-p', "--prefix", type=str, default=VACA_PREFIX, help="Define the prefix for the PVs in the window.") args = parser.parse_args() app = SiriusApplication() icon = qta.icon( 'mdi.gauge', color=_util.get_appropriate_color('LI')) MyWindow = create_window_from_widget( EnergyMeasure, title='Linac Energy Measure', is_main=True, icon=icon) app.open_window(MyWindow) sys.exit(app.exec_())
#!/usr/bin/env python-sirius """Open Window to control SI Scrapers widgets.""" import sys import argparse as _argparse from siriushla.sirius_application import SiriusApplication from siriuspy.envars import VACA_PREFIX from siriushla.si_di_scraps import ScrapersView from siriushla.widgets.windows import create_window_from_widget parser = _argparse.ArgumentParser( description="Run Interface to control SI Scrapers widgets.") parser.add_argument('-p', "--prefix", type=str, default=VACA_PREFIX, help="Define the prefix for the PVs in the window.") args = parser.parse_args() app = SiriusApplication() prefix = args.prefix window = create_window_from_widget(ScrapersView, title='SI Scrapers View', is_main=True) app.open_window(window, parent=None, prefix=prefix) sys.exit(app.exec_())
#!/usr/bin/env python-sirius """Open Window to control TB Slits widgets.""" import sys import argparse as _argparse from siriushla.sirius_application import SiriusApplication from siriuspy.envars import VACA_PREFIX from siriushla.tb_di_slits import SlitsView from siriushla.widgets.windows import create_window_from_widget parser = _argparse.ArgumentParser( description="Run Interface to control TB Slits widgets.") parser.add_argument( '-p', "--prefix", type=str, default=VACA_PREFIX, help="Define the prefix for the PVs in the window.") args = parser.parse_args() app = SiriusApplication() prefix = args.prefix window = create_window_from_widget( SlitsView, title='TB Slits View', is_main=True) app.open_window(window, parent=None, prefix=prefix) sys.exit(app.exec_())
def _setupSettingsLayout(self): label_CamEnbl = QLabel('Enable:', self) hbox_CamEnbl = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='Enbl', propty_type='enbldisabl', width=3) label_FrameCnt = QLabel('Frame Count:', self) hbox_FrameCnt = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='FrameCnt', propty_type='mon') label_Conn = QLabel('Connection:', self) hbox_Conn = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='Connection', propty_type='mon') label_Reset = QLabel('Reset Camera:', self) self.pb_dtl = PyDMPushButton( label='', icon=qta.icon('fa5s.sync'), parent=self, pressValue=1, init_channel=self.cam_prefix.substitute(propty='Rst-Cmd')) self.pb_dtl.setObjectName('reset') self.pb_dtl.setStyleSheet( "#reset{min-width:25px; max-width:25px; icon-size:20px;}") flay_sts = QFormLayout() flay_sts.setSpacing(6) flay_sts.setFormAlignment(Qt.AlignHCenter) flay_sts.setLabelAlignment(Qt.AlignRight) flay_sts.addRow(label_CamEnbl, hbox_CamEnbl) flay_sts.addRow(label_FrameCnt, hbox_FrameCnt) flay_sts.addRow(label_Conn, hbox_Conn) flay_sts.addRow(label_Reset, self.pb_dtl) label_AcqMode = QLabel('Acq. Mode:', self) hbox_AcqMode = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='AcqMode', propty_type='enum') label_AcqPeriod = QLabel('Acq. Period [s]:', self) hbox_AcqPeriod = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='AcqPeriod', propty_type='sprb') label_ExpTime = QLabel('Exp. Time [us]:', self) hbox_ExpTime = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='ExposureTime', propty_type='sprb') label_Gain = QLabel('Gain [dB]:', self) hbox_Gain = create_propty_layout(parent=self, prefix=self.cam_prefix, propty='Gain', propty_type='sprb', cmd={ 'label': '', 'pressValue': 1, 'width': '25', 'height': '25', 'icon': qta.icon('mdi.auto-fix'), 'icon-size': '20', 'toolTip': 'Auto Gain', 'name': 'AutoGain' }) flay_ctrl = QFormLayout() flay_ctrl.setSpacing(6) flay_ctrl.setFormAlignment(Qt.AlignHCenter) flay_ctrl.setLabelAlignment(Qt.AlignRight) flay_ctrl.addRow(label_AcqMode, hbox_AcqMode) flay_ctrl.addRow(label_AcqPeriod, hbox_AcqPeriod) flay_ctrl.addRow(label_ExpTime, hbox_ExpTime) flay_ctrl.addRow(label_Gain, hbox_Gain) self.pb_details = QPushButton(qta.icon('fa5s.ellipsis-h'), '', self) self.pb_details.setToolTip('More settings') self.pb_details.setObjectName('detail') self.pb_details.setStyleSheet( "#detail{min-width:25px; max-width:25px; icon-size:20px;}") self.pb_details.setSizePolicy(QSzPlcy.Expanding, QSzPlcy.Preferred) MyWindow = create_window_from_widget(BaslerCamSettings, title=self.device + ' Settings Details', is_main=True) util.connect_window(self.pb_details, MyWindow, parent=self, prefix=self.prefix, device=self.device) lay = QHBoxLayout() lay.setSpacing(20) lay.addLayout(flay_sts) lay.addLayout(flay_ctrl) lay.addWidget(self.pb_details, alignment=Qt.AlignTop) return lay
def setupui(self): vbl = QVBoxLayout(self) lab = QLabel('<h2>' + self.bpm + ' Settings</h2>') lab.setAlignment(Qt.AlignCenter) vbl.addWidget(lab) vbl.addSpacing(10) hbl = QHBoxLayout() hbl.setSpacing(15) hbl.addStretch() grpbx = CustomGroupBox('Status', self) gdl = QGridLayout(grpbx) props = (('asyn.CNCT', 'Connected'), ('asyn.ENBL', 'Enabled'), ('RFFEasyn.CNCT', 'RFFE Connected'), ('RFFEasyn.ENBL', 'RFFE Enabled'), ('ADCAD9510PllStatus-Mon', 'Clock Synched')) for i, prop in enumerate(props): led = SiriusLedState(grpbx, init_channel=self.get_pvname(prop[0])) led.setOffColor(led.Red) lab = QLabel(prop[1], grpbx) gdl.addWidget(led, i, 0) gdl.addWidget(lab, i, 1) hbl.addWidget(grpbx) hbl.addStretch() grpbx = CustomGroupBox('Advanced Settings', self) vbl2 = QVBoxLayout(grpbx) vbl2.setSpacing(10) pbt = QPushButton('Software') Window = create_window_from_widget(AdvancedSettings, title=self.bpm + ': Advanced Settings') util.connect_window(pbt, Window, parent=grpbx, prefix=self.prefix, bpm=self.bpm) vbl2.addWidget(pbt) pbt = QPushButton('Hardware') Window = create_window_from_widget(HardwareSettings, title=self.bpm + ': Hardware Settings') util.connect_window(pbt, Window, parent=grpbx, prefix=self.prefix, bpm=self.bpm) vbl2.addWidget(pbt) hbl.addWidget(grpbx) hbl.addStretch() vbl.addItem(hbl) vbl.addSpacing(20) vbl.addStretch() grpbx = self._create_formlayout_groupbox( 'Offset Parameters', (('PosQOffset-SP', 'Offset PosQ'), ('PosXOffset-SP', 'Offset PosX'), ('PosYOffset-SP', 'Offset PosY'))) vbl.addWidget(grpbx) vbl.addSpacing(20) vbl.addStretch() grpbx = self._create_formlayout_groupbox('Gain Parameters', (('PosKq-SP', 'Gain PosQ'), ('PosKsum-SP', 'Gain Sum'), ('PosKx-SP', 'Gain PosX'), ('PosKy-SP', 'Gain PosY'))) vbl.addWidget(grpbx) vbl.addSpacing(20) vbl.addStretch() grpbx = self._create_formlayout_groupbox( 'Informations', (('INFOHarmonicNumber-SP', 'Harmonic Number'), ('INFOFOFBRate-SP', 'FOFB Rate'), ('INFOMONITRate-SP', 'Monitor Rate'), ('INFOTBTRate-SP', 'TbT Rate'), ('RFFEAtt-SP', 'RFFE Attenuation'))) vbl.addWidget(grpbx) vbl.addSpacing(20) vbl.addStretch()
#!/usr/bin/env python-sirius """Linac MPS Controller""" import sys import argparse as _argparse from siriuspy.envars import VACA_PREFIX from siriushla.sirius_application import SiriusApplication from siriushla.widgets.windows import create_window_from_widget from siriushla.li_ap_mps import MPSControl parser = _argparse.ArgumentParser( description="Run Linac MPS Control Interface.") parser.add_argument('-p', "--prefix", type=str, default=VACA_PREFIX, help="Define the prefix for the PVs in the window.") args = parser.parse_args() app = SiriusApplication() window = create_window_from_widget(MPSControl, title='LI MPS Control', is_main=True, withscroll=True, min_width=67) app.open_window(window, parent=None, prefix=args.prefix) sys.exit(app.exec_())