From 71702f5f7a75a1565f10d8c89b182bdf11faa919 Mon Sep 17 00:00:00 2001
From: chrin
", i, j, k, title3) - self.level2_tab_wgt[i][j].addTab(self.results_wgt_2, title3) + self.level2_tab_wgt[i][j].addTab( + self.results_wgt_2, title3) else: print("LEVEL2/3=============>", i, j, k, title3) - self.level2_tab_wgt[i][j].addTab(self.level3_wgt[i][j][k], title3) - - if not is_plot: - self.level1_tab_wgt[i].addTab(self.level2_wgt[i][j], title2) + self.level2_tab_wgt[i][j].addTab( + self.level3_wgt[i][j][k], title3) + + if not is_plot: + self.level1_tab_wgt[i].addTab( + self.level2_wgt[i][j], title2) else: - #if i == 1 and j==0: + # if i == 1 and j==0: # print("////", i, flush=True) - # self.level1_tab_wgt[i].addTab(self.results_wgt_2, title2) - #else: + # self.level1_tab_wgt[i].addTab( + # self.results_wgt_2, title2) + # else: # print("//=", i, flush=True) - + self.level1_tab_wgt[i].addTab(self.results_wgt, title2) - layout2 = QGridLayout() #self.level1_wgt[i]) + layout2 = QGridLayout() # self.level1_wgt[i]) layout2.addWidget(self.level2_tab_wgt[i][j]) - layout2.addWidget(QFrame()) #Add to stop streching of Measurement Tab - - layout2.setContentsMargins(_margin, _margin, _margin, _margin) + # Add to stop streching of Measurement Tab + layout2.addWidget(QFrame()) + + layout2.setContentsMargins( + _margin, _margin, _margin, _margin) self.level2_wgt[i][j].setLayout(layout2) - - - layout = QGridLayout() #self.level1_wgt[i]) + + layout = QGridLayout() # self.level1_wgt[i]) layout.addWidget(self.level1_tab_wgt[i], 1, 0, 1, 20) self.level1_wgt[i].setLayout(layout) layout.setContentsMargins(_margin, _margin, _margin, _margin) self.central_tab_widget.addTab(self.level1_wgt[i], title) - - - #***How to get to the widgets within the lowest level tabs*** + # ***How to get to the widgets within the lowest level tabs*** #lo = QHBoxLayout() - #lo.addWidget(QLabel('TEST')) - #self.gui_frame.level2_tab_wgt[1][0].widget(0).setLayout(lo) - #self.gui_frame.level3_wgt[1][0][0].setLayout(lo) - - #if "GUI" in self.settings.data: - #self.central_tab_widget.addTab( - ## self.level1_tab_wgt[1].addTab( - ## self.results_wgt, self.settings.data["GUI"]["resultsTabTitle"]) - + # lo.addWidget(QLabel('TEST')) + # self.gui_frame.level2_tab_wgt[1][0].widget(0).setLayout(lo) + # self.gui_frame.level3_wgt[1][0][0].setLayout(lo) + + # if "GUI" in self.settings.data: + # self.central_tab_widget.addTab( + # self.level1_tab_wgt[1].addTab( + # self.results_wgt, self.settings.data["GUI"]["resultsTabTitle"]) + self.central_tab_widget.addTab(self.log_wgt, "Log") self.operator_wgt = self.level3_wgt[0][0][0] self.expert_wgt = self.level3_wgt[0][0][1] self.measurement_tab_wgt = self.level2_tab_wgt[0][0] self.measurement_wgt = self.level2_wgt[0][0] - + def init_central_tab_widget(self): """ Add tabs to central widget """ self.central_tab_widget.setFont(self.font_gui) self.central_tab_widget.addTab(self.measurement_wgt, "Measurement") - - #if "GUITree" in self.settings.data: + + # if "GUITree" in self.settings.data: # tab = list(self.settings.data["GUITree"].keys())[0] # self.central_tab_widget.addTab(self.measurement_wgt, tab) @@ -421,31 +433,32 @@ class GUIFrame(QWidget): def init_measurement_tab_wgt(self): """ Add tabs to measurement widget """ - row_idx = 0 + row_idx = 0 column_idx = 0 no_rows = 1 no_columns = 1 try: - layout_parameters = self.settings.data["MeasurementGridLayout"] + layout_parameters = self.settings.data['MeasurementGridLayout'] row_idx = layout_parameters[0] column_idx = layout_parameters[1] no_rows = layout_parameters[2] no_columns = layout_parameters[3] except KeyError: pass - + self.measurement_tab_wgt.setFont(self.font_gui) - self.measurement_tab_wgt.addTab(self.operator_wgt, "Operator") - self.measurement_tab_wgt.addTab(self.expert_wgt, "Expert") + self.measurement_tab_wgt.addTab(self.operator_wgt, 'Operator') + self.measurement_tab_wgt.addTab(self.expert_wgt, 'Expert') self.measurement_layout.addWidget( self.measurement_tab_wgt, row_idx, column_idx, no_rows, no_columns) + def init_results_tab_wgt(self): """ Add canvas tabs for plots/results """ - + self.results_tab_wgt.setFont(self.font_gui) - + for i, (wgt, subtitle) in enumerate(zip(self.sub_results_wgt, self.results_tab_wgt_titles)): @@ -458,22 +471,21 @@ class GUIFrame(QWidget): wgt.setLayout(self.sub_results_layout[i]) top_layout.addWidget(wgt) - #top_layout.addWidget(QLabel("HERE")) + # top_layout.addWidget(QLabel("HERE")) top_widget.setLayout(top_layout) self.results_tab_wgt.addTab(top_widget, subtitle) - + self.results_layout.addWidget(self.results_tab_wgt) - - + def init_results_tab_wgt_2(self): """ Add canvas tabs for plots/results """ self.results_tab_wgt_2.setFont(self.font_gui) - + for i, (wgt, subtitle) in enumerate(zip(self.sub_results_wgt_2, self.results_tab_wgt_titles_2)): - + top_widget = QWidget(self.results_tab_wgt_2) top_layout = QVBoxLayout() self.sub_results_layout_2[i] = QVBoxLayout() @@ -482,21 +494,20 @@ class GUIFrame(QWidget): top_layout.addWidget(self.get_arrow_button_widget(i)) wgt.setLayout(self.sub_results_layout_2[i]) - + top_layout.addWidget(wgt) - #top_layout.addWidget(QLabel("THERE")) + # top_layout.addWidget(QLabel("THERE")) top_widget.setLayout(top_layout) self.results_tab_wgt_2.addTab(top_widget, subtitle) - + self.results_layout_2.addWidget(self.results_tab_wgt_2) - def show_log_message(self, severity=None, pymodule="", lineno=0, message="", options=None): """ Post to log window """ source = "{0}:{1:d} ".format(pymodule, lineno) - #datetime.utcnow() + # datetime.utcnow() message_to_send = datetime.now().strftime( "%Y-%m-%d %H:%M:%S.%f")[:-5] message_to_send += " " @@ -504,8 +515,8 @@ class GUIFrame(QWidget): message_to_send += severity.name elif severity in self.msg_severity_qcolor.keys(): message_to_send += str(severity) - elif str(severity) == "WARNING": - message_to_send += "WARN" + elif str(severity) == 'WARNING': + message_to_send += 'WARN' message_to_send += (" {" + source + message + "} ") if options: for k, v in options.items(): @@ -518,42 +529,42 @@ class GUIFrame(QWidget): self.log_wgt.item(0).setForeground( self.msg_severity_qcolor.get(severity, QColor(8, 8, 8))) + # Top level groups - #Top level groups def analysis_procedure_group(self): """ Procedure group box """ if 'V' in self.orientation_procedure.upper(): - _width = 208 - _height = 196 + _width = 208 + _height = 206 else: - _width = 508 + _width = 508 _height = 106 - group_box = QGroupBox("Procedure") - group_box.setObjectName("OUTER") + group_box = QGroupBox('Procedure') + group_box.setObjectName('OUTER') vbox = QVBoxLayout() vbox.addLayout(self.create_analysis_wgt()) vbox.setContentsMargins(9, 19, 9, 9) vbox.setSpacing(5) - vbox.setAlignment(Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignHCenter)) + vbox.setAlignment(Qt.AlignmentFlag(Qt.AlignTop | Qt.AlignHCenter)) group_box.setMaximumWidth(_width) - group_box.setMinimumHeight(_height) + group_box.setFixedHeight(_height) group_box.setFont(self.font_gui) - group_box.setAlignment(Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignHCenter)) + group_box.setAlignment(Qt.AlignmentFlag(Qt.AlignTop | Qt.AlignHCenter)) group_box.setLayout(vbox) return group_box def optics_groupbox(self): """ Optice set and restore group box """ - self.optics_group = QGroupBox("Optics") - self.optics_group.setObjectName("OUTER") + self.optics_group = QGroupBox('Optics') + self.optics_group.setObjectName('OUTER') self.optics_group.setMaximumWidth(208) self.optics_group.setMaximumHeight(220) self.optics_group.setFont(self.font_gui) self.optics_group.setAlignment( - Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignHCenter)) + Qt.AlignmentFlag(Qt.AlignTop | Qt.AlignHCenter)) self.optics_group.setAlignment(Qt.AlignCenter) self.optics_group.setLayout(self.create_optics_layout()) self.optics_group.table = None @@ -563,48 +574,48 @@ class GUIFrame(QWidget): self.optics_group.cycle_quads = None return self.optics_group - def output_parameters_group(self, title="Results Output"): + def output_parameters_group(self, title='Results Output'): """ Generic group box for user supplied input """ self.output_parameters_wgt = QWidget() qtop = QVBoxLayout() self.output_parameters_group_box = QGroupBox(title) - self.output_parameters_group_box.setObjectName("OUTER") + self.output_parameters_group_box.setObjectName('OUTER') vbox = QVBoxLayout() vbox.setContentsMargins(9, 19, 9, 9) - vbox.setAlignment(Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignHCenter)) + vbox.setAlignment(Qt.AlignmentFlag(Qt.AlignTop | Qt.AlignHCenter)) keys = self.settings.data["Results"].keys() max_str_len = 4 for key in keys: if len(key) > max_str_len: max_str_len = len(key) - + for key in keys: - ikey = self.settings.data["Results"][key] - + ikey = self.settings.data['Results'][key] + if ikey['flag']: - _widget = ikey["data"]["widget"].upper() - _text = ikey["data"]["text"] - _value = str(ikey["data"]["value"]) - _width = int(ikey["data"]["width"]) - if _widget == "QLINEEDIT": + _widget = ikey['data']['widget'].upper() + _text = ikey['data']["text"] + _value = str(ikey['data']['value']) + _width = int(ikey['data']['width']) + if _widget == 'QLINEEDIT': ql = QLabel(str(_text)) - _label_width = (ql.fontMetrics().averageCharWidth() * - max_str_len+2) + _label_width = (ql.fontMetrics().averageCharWidth() * + max_str_len + 2) ql.setMinimumWidth(_label_width) ql.setFixedHeight(self.widget_height) ql.setFont(self.font_pts10) - + wgt = QLineEdit() wgt.setFixedWidth(_width) - wgt.setObjectName("ReadRight") + wgt.setObjectName('ReadRight') wgt.setFixedHeight(self.widget_height) wgt.setFont(self.font_pts10) wgt.setAlignment(Qt.AlignRight) self.results_output_wgt_dict[key] = wgt if "NONE" not in _value.upper(): self.results_output_wgt_dict[key].setText(_value) - + hbox = QHBoxLayout() hbox.setContentsMargins(0, 0, 0, 0) hbox.addWidget(ql) @@ -615,11 +626,11 @@ class GUIFrame(QWidget): self.output_parameters_group_box.setContentsMargins(9, 19, 9, 9) self.output_parameters_group_box.setMinimumWidth(140) self.output_parameters_group_box.setMaximumWidth(300) - #self.output_parameters_group_box.setMaximumHeight(400) + # self.output_parameters_group_box.setMaximumHeight(400) self.output_parameters_group_box.setFont(self.font_gui) self.output_parameters_group_box.setAlignment( - Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignHCenter)) - + Qt.AlignmentFlag(Qt.AlignTop | Qt.AlignHCenter)) + qf = QFrame() qf.setFixedHeight(35) self.output_parameters_group_box.setLayout(vbox) @@ -631,7 +642,6 @@ class GUIFrame(QWidget): def send_to_results_output_wgt(self, results_data): for key, value in results_data.items(): self.results_output_wgt_dict[key].setText(str(value)) - def input_parameters_group(self, title="Input Parameters"): """ Generic group box for user supplied input @@ -640,12 +650,12 @@ class GUIFrame(QWidget): group_box.setObjectName("OUTER") hbox = QVBoxLayout() hbox.setContentsMargins(9, 19, 9, 9) - hbox.setAlignment(Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignHCenter)) + hbox.setAlignment(Qt.AlignmentFlag(Qt.AlignTop | Qt.AlignHCenter)) group_box.setContentsMargins(0, 0, 0, 0) group_box.setMinimumWidth(200) group_box.setMaximumHeight(400) group_box.setFont(self.font_gui) - group_box.setAlignment(Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignHCenter)) + group_box.setAlignment(Qt.AlignmentFlag(Qt.AlignTop | Qt.AlignHCenter)) group_box.setLayout(hbox) return group_box @@ -661,7 +671,6 @@ class GUIFrame(QWidget): self.expert_parameters_group = self.input_parameters_group(title) return self.expert_parameters_group - def create_checkbox(self, top_key, key, text="", tip="", default_value=Qt.Unchecked): """ Generic check box @@ -670,26 +679,23 @@ class GUIFrame(QWidget): def on_checkbox_change(value): self.input_parameters[key] = bool(value) #print("CB fired") - #print(self.input_parameters[key]) - #print(self.input_parameters) - if key == "goodRegion": + # print(self.input_parameters[key]) + # print(self.input_parameters) + if key == 'goodRegion': self.good_region_group.setEnabled(value) - - - checkbox = QCheckBox(text) - + checkbox.setToolTip(tip) checkbox.setFont(self.font_gui) checkbox.stateChanged.connect(on_checkbox_change) - #checkbox.setFixedHeight(30) - #checkbox.setLayoutDirection(Qt.RightToLeft) + # checkbox.setFixedHeight(30) + # checkbox.setLayoutDirection(Qt.RightToLeft) checked_value = default_value if key in self.parent.input_parameters.keys(): - if "data" in self.settings.data[top_key][key].keys(): - if "value" in self.settings.data[top_key][key]["data"].keys(): - if self.settings.data[top_key][key]["data"]["value"]: + if 'data' in self.settings.data[top_key][key].keys(): + if 'value' in self.settings.data[top_key][key]['data'].keys(): + if self.settings.data[top_key][key]['data']['value']: checked_value = Qt.Checked else: checked_value = Qt.Unchecked @@ -705,7 +711,6 @@ class GUIFrame(QWidget): step=0.1, start_val=0.5, digits=1): """ Generic QDoubleSpinbox with buddy label """ - def callback(value): self.input_parameters[key] = round(value, digits) @@ -722,7 +727,7 @@ class GUIFrame(QWidget): wgt.setFont(self.font_pts10) wgt.setContentsMargins(5, 0, 0, 0) decimal = Decimal(str(step)) - wgt.setDecimals(abs(decimal.as_tuple().exponent)) #precision + wgt.setDecimals(abs(decimal.as_tuple().exponent)) # precision wgt.setRange(min_val, max_val) wgt.setSingleStep(step) fm = QFontMetricsF(wgt.font()) @@ -736,7 +741,6 @@ class GUIFrame(QWidget): return lab, wgt - def create_label_qspinbox(self, key, label="", min_val=0, max_val=100, step=1, start_val=5): """ Generic QSpinbox with buddy label @@ -745,7 +749,6 @@ class GUIFrame(QWidget): def cb(value): self.input_parameters[key] = value - widget_height = 24 suggested = "WWW" lab = QLabel(label) @@ -771,16 +774,15 @@ class GUIFrame(QWidget): return lab, wgt - def create_label_qcombobox(self, key, label="", values: list = [], - start_val: str =""): + start_val: str = ""): """ Generic QCombobox with buddy label """ def cb(new_text): self.input_parameters[key] = new_text #print( self.input_parameters) - + widget_height = 26 suggested = "WWW" lab = QLabel(label) @@ -796,7 +798,7 @@ class GUIFrame(QWidget): wgt.setFont(self.font_pts10) wgt.setContentsMargins(5, 0, 0, 0) wgt.currentTextChanged.connect(cb) - + start_idx = wgt.findText(start_val) start_idx = start_idx if start_idx > 0 else 0 wgt.setCurrentIndex(start_idx) @@ -830,18 +832,17 @@ class GUIFrame(QWidget): abort_tooltip) self.save_all_wgt = self.save_all_group() - + grid = QVBoxLayout() if 'V' in self.orientation_procedure.upper() \ else QHBoxLayout() - + grid.addWidget(self.start_wgt) grid.addWidget(self.abort_wgt) grid.addWidget(self.save_all_wgt) - grid.setAlignment(Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignTop)) + grid.setAlignment(Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignTop)) return grid - def create_optics_layout(self): vbox = QGridLayout() self.set_optics_btn = QPushButton("Set") @@ -862,7 +863,7 @@ class GUIFrame(QWidget): self.restore_optics_btn.setToolTip(_tip) self.target_optics = QLabel() - #self.target_optics.setText(_text) + # self.target_optics.setText(_text) self.target_optics.setFixedWidth(150) self.target_optics.setFixedHeight(40) self.target_optics.setStyleSheet("background-color:white;") @@ -890,19 +891,17 @@ class GUIFrame(QWidget): for table in self.table_wgt: table.init_value_button.setEnabled(False) table.restore_value_button.setEnabled(False) - + if self.output_parameters_wgt is not None: for wgt in self.results_output_wgt_dict.values(): wgt.setText("") - #self.output_parameters_wg.setEnabled(False) - + # self.output_parameters_wg.setEnabled(False) def in_abort_procedure(self): self.abort_wgt.setEnabled(False) self.start_wgt.setEnabled(False) self.start_wgt.setText("Aborting...") - def reset_procedure(self): self.abort_wgt.setVisible(False) @@ -918,7 +917,7 @@ class GUIFrame(QWidget): for table in self.table_wgt: table.init_value_button.setEnabled(True) table.restore_value_button.setEnabled(True) - #if self.output_parameters_wgt is not None: + # if self.output_parameters_wgt is not None: # self.output_parameters_wgt.setEnabled(True) def in_hdf_measurement_procedure(self): @@ -927,7 +926,6 @@ class GUIFrame(QWidget): self.start_wgt.setEnabled(False) self.start_wgt.setText("HDF analysis...") self.save_all_group_box.setEnabled(False) - def hdf_reset_procedure(self): self.parent.h5_groupbox.analyze_h5_widget.setEnabled(True) @@ -962,7 +960,7 @@ class GUIFrame(QWidget): start_wgt.setVisible(True) return start_wgt - def combine_save_icons(self): #epics=False, hdf=False, elog=False): + def combine_save_icons(self): # epics=False, hdf=False, elog=False): epics = self.autopost_epics hdf = self.autopost_hdf elog = self.autopost_elog @@ -987,7 +985,7 @@ class GUIFrame(QWidget): elif hdf: startx2 = 75 startx3 = 225 - comboPixmap = QPixmap(420, 100) #420, 100 + comboPixmap = QPixmap(420, 100) # 420, 100 comboPixmap.fill(Qt.transparent) epicsImage = QPixmap(":/epics.png") hdfImage = QPixmap(":/hdfS.png") @@ -1003,22 +1001,23 @@ class GUIFrame(QWidget): painter.end() return combinedIcon - def post_measurement_save_button(self): # epics=True, hdf=True, elog=True): - epics = self.autopost_epics #= epics - hdf = self.autopost_hdf #= hdf - elog = self.autopost_elog #= elog + # epics=True, hdf=True, elog=True): + def post_measurement_save_button(self): + epics = self.autopost_epics # = epics + hdf = self.autopost_hdf # = hdf + elog = self.autopost_elog # = elog widget_height = 40 true_list = [epics, hdf, elog] widget_width = max(75, 45 * true_list.count(True)) save_data_btn = QPushButton("") save_data_btn.setIconSize(QSize(100, 38)) save_data_btn.setIcon(self.combine_save_icons()) - #epics=epics, hdf=hdf, elog=elog)) + # epics=epics, hdf=hdf, elog=elog)) save_data_btn.setFixedHeight(widget_height) save_data_btn.setObjectName("WriteData") save_data_btn.clicked.connect(self.parent.write_to_destinations) save_data_btn.setFixedHeight(widget_height) - save_data_btn.setFixedWidth(widget_width) #80 for one + save_data_btn.setFixedWidth(widget_width) # 80 for one if epics and hdf and elog: choices = "epics/hdf5/elog" elif epics and hdf: @@ -1042,12 +1041,12 @@ class GUIFrame(QWidget): hbox = QVBoxLayout() hbox.addWidget(self.post_measurement_save_button()) hbox.setContentsMargins(9, 19, 9, 9) - hbox.setAlignment(Qt.AlignmnetFlag(Qt.AlignTop|Qt.AlignHCenter)) + hbox.setAlignment(Qt.AlignmnetFlag(Qt.AlignTop | Qt.AlignHCenter)) group_box.setContentsMargins(0, 0, 0, 0) group_box.setFixedWidth(208) group_box.setMaximumHeight(130) group_box.setFont(self.font_gui) - group_box.setAlignment(Qt.AlignmnetFlag(Qt.AlignTop|Qt.AlignHCenter)) + group_box.setAlignment(Qt.AlignmnetFlag(Qt.AlignTop | Qt.AlignHCenter)) group_box.setLayout(hbox) return group_box @@ -1063,35 +1062,34 @@ class GUIFrame(QWidget): self.save_all_group_box.setFixedHeight(60) self.save_all_group_box.setFont(self.font_gui) self.save_all_group_box.setAlignment( - Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignHCenter)) + Qt.AlignmentFlag(Qt.AlignTop | Qt.AlignHCenter)) self.save_all_group_box.setLayout(hbox) return self.save_all_group_box - def image_parameters_group(self): self.pipeline_group_box = QGroupBox("Image Pipeline Expert") box = QHBoxLayout() box.setSpacing(10) try: - start_val_gr = self.settings.data["Expert"]["pipeline"]["data"][ + start_val_gr = self.settings.data['Expert']["pipeline"]['data'][ "goodRegion"] start_val_gr = Qt.Checked if start_val_gr else Qt.Unchecked except KeyError as ex: start_val_gr = Qt.Unchecked box.addWidget(self.create_checkbox( - top_key="Expert", key="goodRegion", text="Good region", + top_key='Expert', key="goodRegion", text="Good region", tip="Enables good region in pipeline", default_value=start_val_gr)) try: - start_val_sub = self.settings.data["Expert"]["pipeline"]["data"][ + start_val_sub = self.settings.data['Expert']["pipeline"]['data'][ "subtractBackground"] start_val_sub = Qt.Checked if start_val_sub else Qt.Unchecked except KeyError as ex: start_val_sub = Qt.Unchecked box.addWidget(self.create_checkbox( - top_key="Expert", key="subtractBackground", + top_key='Expert', key="subtractBackground", text="Subtract bkgrnd", tip="Enables background subtraction in pipeline", default_value=start_val_sub)) @@ -1102,17 +1100,17 @@ class GUIFrame(QWidget): self.good_region_group.setObjectName("INNER") try: - start_val_grThreshold = self.settings.data["Expert"]["pipeline"][ - "data"]["grThreshold"] + start_val_grThreshold = self.settings.data['Expert']["pipeline"][ + 'data']["grThreshold"] except KeyError as ex: start_val_grThreshold = 21 lab_thresh, thresh = self.create_label_qdoublespinbox( - key="grThreshold", label="Threshold:", + key="grThreshold", label="Threshold:", start_val=start_val_grThreshold) try: - start_val_grScale = self.settings.data["Expert"]["pipeline"][ - "data"]["grScale"] + start_val_grScale = self.settings.data['Expert']["pipeline"][ + 'data']["grScale"] except KeyError as ex: start_val_grScale = 6 lab_gfscale, gfscale = self.create_label_qspinbox( @@ -1125,29 +1123,28 @@ class GUIFrame(QWidget): layout.addWidget(gfscale, 1, 1) self.good_region_group.setLayout(layout) - self.slicing_group.setObjectName("INNER") try: - start_val_nslices = self.settings.data["Expert"]["pipeline"][ - "data"]["slices"] + start_val_nslices = self.settings.data['Expert']["pipeline"][ + 'data']["slices"] except KeyError as ex: start_val_nslices = 21 lab_slices, slices = self.create_label_qspinbox( key="slices", label="No. Slices:", start_val=start_val_nslices) try: - start_val_slicing_scale = self.settings.data["Expert"]["pipeline"][ - "data"]["slicingScale"] + start_val_slicing_scale = self.settings.data['Expert']["pipeline"][ + 'data']["slicingScale"] except KeyError as ex: start_val_slicing_scale = 5 lab_scale, scale = self.create_label_qspinbox( - key="slicingScale", label="Scale:", + key="slicingScale", label="Scale:", start_val=start_val_slicing_scale) try: - start_val_orientation = self.settings.data["Expert"]["pipeline"][ - "data"]["orientation"] + start_val_orientation = self.settings.data['Expert']["pipeline"][ + 'data']["orientation"] except KeyError as ex: start_val_orientation = "vertical" @@ -1162,43 +1159,37 @@ class GUIFrame(QWidget): layout.addWidget(lab_scale, 1, 0) layout.addWidget(scale, 1, 1) layout.addWidget(lab_orientation, 2, 0, 1, 2, Qt.AlignBottom) - layout.addWidget(self.slice_orientation, 3, 0, 1, 2, - Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignRight)) + layout.addWidget(self.slice_orientation, 3, 0, 1, 2, + Qt.AlignmentFlag(Qt.AlignTop | Qt.AlignRight)) self.slicing_group.setLayout(layout) layout_top = QGridLayout() - #layout_top.addWidget(self.create_checkbox( - # top_key="Expert", key="pipelineCtrl", + # layout_top.addWidget(self.create_checkbox( + # top_key='Expert', key="pipelineCtrl", # text="Enable pipeline control from HLA", # tip="HLA to set pipeline parameters", # default_value=0), 0, 0, 1, 2) - layout_top.addLayout(box, 1, 0, 1, 2) layout_top.addWidget(self.good_region_group, 2, 0, 1, 1, - Qt.AlignmentFlag(Qt.AlignHCenter|Qt.AlignTop)) - layout_top.addWidget(self.slicing_group, 2, 1, 1, 1, - Qt.AlignmentFlag(Qt.AlignCenter|Qt.AlignTop)) + Qt.AlignmentFlag(Qt.AlignHCenter | Qt.AlignTop)) + layout_top.addWidget(self.slicing_group, 2, 1, 1, 1, + Qt.AlignmentFlag(Qt.AlignCenter | Qt.AlignTop)) layout_top.setHorizontalSpacing(8) self.pipeline_group_box.setLayout(layout_top) self.pipeline_group_box.setFixedHeight(200) - if "HLAPipelineCtrl" in self.parent.input_parameters: - self.pipeline_group_box.setEnabled( - self.parent.input_parameters["HLAPipelineCtrl"]) + if "HLAPipelineCtrl" in self.parent.input_parameters: + self.pipeline_group_box.setEnabled( + self.parent.input_parameters["HLAPipelineCtrl"]) return self.pipeline_group_box - - - - def checkbox_wgt(self, key: str = "", tooltip: str = "", object_name=None, hline="NONE"): def on_change(state): self.input_parameters[key] = bool(state) - widget = QWidget() layout = QGridLayout() @@ -1208,11 +1199,11 @@ class GUIFrame(QWidget): layout.addWidget(QHLine(), 0, 0, 1, 3) row_wgt = 1 try: - text = self.settings.data["Expert"][key]["data"]["text"] + text = self.settings.data['Expert'][key]['data']["text"] except KeyError as error: print(("KeyError in guiframe.py; Unknown key {0} " + "in def checkbox_wgt: {1}").format(key, error)) - text = key + text = key checkbox = QCheckBox(text) checkbox.setToolTip(tooltip) @@ -1220,17 +1211,17 @@ class GUIFrame(QWidget): if object_name: checkbox.setObjectName(object_name) - checkbox.setLayoutDirection(Qt.LeftToRight) #is default + checkbox.setLayoutDirection(Qt.LeftToRight) # is default checkbox.stateChanged.connect(on_change) checked_value = Qt.Unchecked - if "Expert" not in self.settings.data: + if 'Expert' not in self.settings.data: return widget - #if key in self.parent.input_parameters.keys(): - if key in self.settings.data["Expert"].keys(): - if "data" in self.settings.data["Expert"][key].keys(): - if "value" in self.settings.data["Expert"][key]["data"].keys(): - if self.settings.data["Expert"][key]["data"]["value"]: + # if key in self.parent.input_parameters.keys(): + if key in self.settings.data['Expert'].keys(): + if 'data' in self.settings.data['Expert'][key].keys(): + if 'value' in self.settings.data['Expert'][key]['data'].keys(): + if self.settings.data['Expert'][key]['data']['value']: checked_value = Qt.Checked checkbox.setCheckState(checked_value) @@ -1239,7 +1230,7 @@ class GUIFrame(QWidget): layout.addWidget(QFrame(), row_wgt, 1, 1, 2) if hline == "BOTTOM": - layout.addWidget(QHLine(), row_wgt+1, 0, 1, 3) + layout.addWidget(QHLine(), row_wgt + 1, 0, 1, 3) widget.setLayout(layout) return widget @@ -1256,7 +1247,8 @@ class GUIFrame(QWidget): def checkbox_keepImages(self, hline="None"): tooltip = ("Store plots/images on disk") - return self.checkbox_wgt(key="keepImages", tooltip=tooltip, hline=hline) + return self.checkbox_wgt( + key="keepImages", tooltip=tooltip, hline=hline) def checkbox_autoCycle(self, hline="None"): tooltip = ("Always cycle quads when setting to new values") @@ -1268,7 +1260,6 @@ class GUIFrame(QWidget): self.input_parameters["debug"] = False return self.checkbox_wgt(key="debug", tooltip=tooltip, hline=hline) - def checkbox_simulation(self, hline="NONE"): def on_change(state): if bool(state): @@ -1292,7 +1283,7 @@ class GUIFrame(QWidget): layout.addWidget(QHLine(), 0, 0, 1, 3) row_wgt = 1 try: - text = self.settings.data["Expert"]["simulation"]["data"]["text"] + text = self.settings.data['Expert']["simulation"]['data']["text"] except KeyError as error: print("KeyError in guiframe.py; def checkbox_simulation:", error) text = "Simulation" @@ -1302,16 +1293,16 @@ class GUIFrame(QWidget): self.simulation_checkbox.setToolTip( "Dry-run only; does not write to EPICS Process Variables") self.simulation_checkbox.setFont(self.font_gui) - + self.simulation_checkbox.stateChanged.connect(on_change) checked_value = Qt.Unchecked if "simulation" in self.parent.input_parameters.keys(): - if "data" in self.settings.data["Expert"]["simulation"].keys(): - if "value" in self.settings.data["Expert"]["simulation"][ - "data"].keys(): - if self.settings.data["Expert"]["simulation"]["data"][ - "value"]: + if 'data' in self.settings.data['Expert']["simulation"].keys(): + if 'value' in self.settings.data['Expert']["simulation"][ + 'data'].keys(): + if self.settings.data['Expert']["simulation"]['data'][ + 'value']: checked_value = Qt.Checked self.simulation_checkbox.setCheckState(checked_value) @@ -1319,17 +1310,16 @@ class GUIFrame(QWidget): layout.addWidget(self.simulation_checkbox, row_wgt, 0) layout.addWidget(QFrame(), row_wgt, 1, 1, 2) if hline == "BOTTOM": - layout.addWidget(QHLine(), row_wgt+1, 0, 1, 3) + layout.addWidget(QHLine(), row_wgt + 1, 0, 1, 3) widget.setLayout(layout) return widget - def get_arrow_button_widget(self, parent_idx=0): #Back/Forward Buttons START#### - arrow_button_widget = QWidget() #self.plot_widget[i]) + arrow_button_widget = QWidget() # self.plot_widget[i]) layout = QHBoxLayout() layout.setContentsMargins(0, 0, 0, 0) - layout.setAlignment(Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignTop)) + layout.setAlignment(Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignTop)) button_left = QToolButton(arrow_button_widget) button_left.setArrowType(Qt.LeftArrow) button_left.clicked.connect(self.on_toggle_left) @@ -1347,19 +1337,17 @@ class GUIFrame(QWidget): arrow_button_widget.setMaximumHeight(25) return arrow_button_widget - #Back/Forward Buttons Actions - def on_toggle_left(self): #(self, is_clicked) - #print(self.sender()) - #print(self.left_arrow_dict[self.sender()]) + # Back/Forward Buttons Actions + def on_toggle_left(self): # (self, is_clicked) + # print(self.sender()) + # print(self.left_arrow_dict[self.sender()]) self.next_figure(self.left_arrow_dict[self.sender()], -1) - - def on_toggle_right(self): #(self, is_clicked) - #print(self.sender()) - #print(self.right_arrow_dict[self.sender()]) + def on_toggle_right(self): # (self, is_clicked) + # print(self.sender()) + # print(self.right_arrow_dict[self.sender()]) self.next_figure(self.right_arrow_dict[self.sender()], 1) - def next_figure(self, det=0, idx=0): if det not in self.canvas_fig_dict: @@ -1393,40 +1381,38 @@ class GUIFrame(QWidget): self.nav[det].setVisible(True) self.nav[det].setStyleSheet("QToolBar { border: 0px }") - def canvas_update(self, fig_data, idx=0): - #place figures in a list - - self.parent.clear_screenshot() + # place figures in a list + + self.parent.clear_screenshot() self.multiple_figure_dict = fig_data - for i, key in enumerate(self.multiple_figure_dict.keys()): + for i, key in enumerate(self.multiple_figure_dict.keys()): self.canvas_fig_dict[i] = key - + print("UPDATE", flush=True) - #print(len(self.canvas), len(self.nav), len(self.sub_results_layout), + # print(len(self.canvas), len(self.nav), len(self.sub_results_layout), # len(self.multiple_figure_dict.keys(), flush=True)) - + for i, (canvas, nav, wgt, layout, key) in enumerate( zip(self.canvas, self.nav, self.sub_results_wgt, self.sub_results_layout, self.multiple_figure_dict.keys())): - + if canvas is not None: layout.removeWidget(canvas) canvas.deleteLater() if nav is not None: nav.deleteLater() - if self.multiple_figure_dict[key]: #'Figure 1']: - + if self.multiple_figure_dict[key]: # 'Figure 1']: + if not isinstance(self.multiple_figure_dict[key], list): temp_list = [] temp_list.append(self.multiple_figure_dict[key]) self.multiple_figure_dict[key] = temp_list - - + self.canvas[i] = FigureCanvasQTAgg( self.multiple_figure_dict[key][idx]) self.sub_results_layout[i].addWidget(self.canvas[i]) @@ -1437,50 +1423,48 @@ class GUIFrame(QWidget): #self.nav[i].setContentsMargins(0, 0, 0, 0) self.nav[i].setVisible(True) self.nav[i].setStyleSheet("QToolBar { border: 0px }") - + self.parent.add_screenshot(title=self.results_tab_wgt_titles[i], item=wgt) - + else: self.canvas[i] = None self.nav[i] = None - def canvas_update_2(self, fig_data, idx=0): - #place figures in a list - - #Only clear last result fro this canvas - #self.parent.clear_screenshot() - + # place figures in a list + + # Only clear last result fro this canvas + # self.parent.clear_screenshot() + self.multiple_figure_dict_2 = fig_data - for i, key in enumerate(self.multiple_figure_dict_2.keys()): + for i, key in enumerate(self.multiple_figure_dict_2.keys()): self.canvas_fig_dict_2[i] = key - + print("UPDATE==2", flush=True) - #print(len(self.canvas), len(self.nav), len(self.sub_results_layout), + # print(len(self.canvas), len(self.nav), len(self.sub_results_layout), # len(self.multiple_figure_dict.keys(), flush=True)) - + for i, (canvas, nav, wgt, layout, key) in enumerate( zip(self.canvas_2, self.nav_2, self.sub_results_wgt_2, self.sub_results_layout_2, self.multiple_figure_dict_2.keys())): - + if canvas is not None: layout.removeWidget(canvas) canvas.deleteLater() if nav is not None: nav.deleteLater() - if self.multiple_figure_dict_2[key]: #'Figure 1']: - + if self.multiple_figure_dict_2[key]: # 'Figure 1']: + if not isinstance(self.multiple_figure_dict_2[key], list): temp_list = [] temp_list.append(self.multiple_figure_dict_2[key]) self.multiple_figure_dict_2[key] = temp_list - - + self.canvas_2[i] = FigureCanvasQTAgg( self.multiple_figure_dict_2[key][idx]) self.sub_results_layout_2[i].addWidget(self.canvas_2[i]) @@ -1492,24 +1476,23 @@ class GUIFrame(QWidget): #self.nav[i].setContentsMargins(0, 0, 0, 0) self.nav_2[i].setVisible(True) self.nav_2[i].setStyleSheet("QToolBar { border: 0px }") - self.parent.clear_screenshot(self.results_tab_wgt_titles_2[i], - wgt) + self.parent.clear_screenshot(self.results_tab_wgt_titles_2[i], + wgt) self.parent.add_screenshot( title=self.results_tab_wgt_titles_2[i], item=wgt) - + else: self.canvas_2[i] = None self.nav_2[i] = None - - def prepare_qlineread(self, line, value): + def prepare_qlineread(self, line, value): line.setObjectName("Read") line.setFixedHeight(24) line.setText(str(value)) - line.setAlignment(Qt.AlignmentFlag(Qt.AlignRight|Qt.AlignBottom)) + line.setAlignment(Qt.AlignmentFlag(Qt.AlignRight | Qt.AlignBottom)) line.setStyleSheet("QLabel{text-align: right}") fm = QFontMetricsF(line.font()) - param_width = fm.maxWidth() * (len(str(value))*0.5) + 20 + param_width = fm.maxWidth() * (len(str(value)) * 0.5) + 20 line.setMaximumWidth(int(param_width)) def prepare_qlineedit(self, line, value, link, title, key): @@ -1519,31 +1502,30 @@ class GUIFrame(QWidget): is_int = False no_decimals = 0 try: - min_val = self.settings.data[link][title][key]["data"]["min"] + min_val = self.settings.data[link][title][key]['data']["min"] has_min = True if isinstance(min_val, float): is_float = True - d = abs(Decimal(str(min_val)).as_tuple().exponent) + d = abs(Decimal(str(min_val)).as_tuple().exponent) no_decimals = max(no_decimals, d) elif isinstance(min_val, int): is_int = True except KeyError: pass try: - max_val = self.settings.data[link][title][key]["data"]["max"] + max_val = self.settings.data[link][title][key]['data']["max"] has_max = True if isinstance(max_val, float): is_float = True d = abs(Decimal(str(max_val)).as_tuple().exponent) - no_decimals = max(no_decimals, d) + no_decimals = max(no_decimals, d) elif isinstance(max_val, int): is_int = True except KeyError: pass - validator = None - #QDoubleValidate only controls the number of digits + # QDoubleValidate only controls the number of digits if is_float: validator = QDoubleValidator() validator.setNotation(QDoubleValidator.StandardNotation) @@ -1558,98 +1540,98 @@ class GUIFrame(QWidget): if has_max: validator.setTop(max_val) validator_str += "to {}".format(max_val) - line.setToolTip(validator_str) + line.setToolTip(validator_str) line.setValidator(validator) line.setObjectName("Write") - line.setFixedHeight(24) + line.setFixedHeight(24) line.setText(str(value)) fm = QFontMetricsF(line.font()) - param_width = fm.maxWidth() * (len(str(value))*0.5) + 20 + param_width = fm.maxWidth() * (len(str(value)) * 0.5) + 20 line.setMaximumWidth(int(param_width)) return line - def prepare_qspinbox(self, line, value, link, title, key): - min_val = self.settings.data[link][title][key]["data"]["min"] - max_val = self.settings.data[link][title][key]["data"]["max"] - step = self.settings.data[link][title][key]["data"]["step"] + def prepare_qspinbox(self, line, value, link, title, key): + min_val = self.settings.data[link][title][key]['data']["min"] + max_val = self.settings.data[link][title][key]['data']["max"] + step = self.settings.data[link][title][key]['data']["step"] line.setObjectName("Write") line.setFixedHeight(24) line.setRange(min_val, max_val) line.setSingleStep(step) line.setValue(value) - line.setAlignment(Qt.AlignRight) #required + line.setAlignment(Qt.AlignRight) # required fm = QFontMetricsF(line.font()) param_width = fm.maxWidth() * (len(str(max_val)) + 0.2) line.setMaximumWidth(int(param_width)) - return line + return line - def prepare_qdoublespinbox(self, line, value, link, title, key): - min_val = self.settings.data[link][title][key]["data"]["min"] - max_val = self.settings.data[link][title][key]["data"]["max"] - step = self.settings.data[link][title][key]["data"]["step"] + def prepare_qdoublespinbox(self, line, value, link, title, key): + min_val = self.settings.data[link][title][key]['data']["min"] + max_val = self.settings.data[link][title][key]['data']["max"] + step = self.settings.data[link][title][key]['data']["step"] line.setObjectName("Write") line.setFixedHeight(24) decimal = Decimal(str(step)) - line.setDecimals(abs(decimal.as_tuple().exponent)) #precision + line.setDecimals(abs(decimal.as_tuple().exponent)) # precision line.setRange(min_val, max_val) line.setSingleStep(step) line.setValue(value) - line.setAlignment(Qt.AlignRight) #required + line.setAlignment(Qt.AlignRight) # required fm = QFontMetricsF(line.font()) param_width = fm.maxWidth() * (len(str(max_val))) line.setMaximumWidth(int(param_width)) - return line + return line - def prepare_qcombobox(self, line, value, link, title, key): + def prepare_qcombobox(self, line, value, link, title, key): line.clear() line.addItems(value) line.setFixedHeight(26) line.setObjectName("Write") value_for_width = max(value, key=len) fm = QFontMetricsF(line.font()) - param_width = fm.maxWidth() * (len(str(value_for_width)) * 0.5) + param_width = fm.maxWidth() * (len(str(value_for_width)) * 0.5) line.setFixedWidth(int(param_width)) - + return line - def prepare_qcheckbox(self, line, value, link, title, key): - + def prepare_qcheckbox(self, line, value, link, title, key): + line.setChecked(Qt.Checked if value else Qt.Unchecked) line.setMaximumWidth(320) line.setMinimumWidth(100) - line.setFixedHeight(28) + line.setFixedHeight(28) try: - orientation = self.settings.data[link][title][key]["data"][ + orientation = self.settings.data[link][title][key]['data'][ "orientation"] orientation = Qt.RightToLeft if "RightToLeft" in orientation \ - else Qt.LeftToRight - line.setLayoutDirection(orientation) + else Qt.LeftToRight + line.setLayoutDirection(orientation) except KeyError as ex: print(ex, flush=True) - pass + pass return line - def prepare_qradiobutton(self, value, link, title, key): + def prepare_qradiobutton(self, value, link, title, key): widget = QWidget() layout = QGridLayout() layout.setContentsMargins(5, 0, 5, 20) - widget.setMaximumWidth(int(len(value)*100)) - + widget.setMaximumWidth(int(len(value) * 100)) + target_list = value color_list = ["#894961", "teal", "darkblue"] width_list = [70, 70, 70] self.radiobutton = [None] * len(target_list) - for i, name in enumerate(target_list): + for i, name in enumerate(target_list): self.radiobutton[i] = QRadioButton(name) - full_width = len(target_list) + 1 + full_width = len(target_list) + 1 layout.addWidget(QHLine(), 0, 0, 1, full_width) layout.addWidget(QLabel( - self.settings.data[link][title][key]['data']['text']), 1, 0, 1, - full_width, Qt.AlignCenter) + self.settings.data[link][title][key]['data']['text']), 1, 0, 1, + full_width, Qt.AlignCenter) for i, (radio, target, color, width) in enumerate( zip(self.radiobutton, target_list, color_list, width_list)): @@ -1659,9 +1641,9 @@ class GUIFrame(QWidget): radio.val = target radio.title = title radio.key = key - + layout.addWidget(radio, 2, i, 1, 1, Qt.AlignCenter) - + layout.addWidget(QHLine(), 3, 0, 1, layout.columnCount()) layout.setSpacing(0) @@ -1682,13 +1664,13 @@ class GUIFrame(QWidget): _idx=0 try: - if key in self.settings.data["Expert"].keys(): - top_key = "Expert" - elif key in self.settings.data["Parameters"].keys(): - top_key = "Parameters" - _choice =self.settings.data[top_key][key]['data']['default'] + if key in self.settings.data['Expert'].keys(): + top_key = 'Expert' + elif key in self.settings.data['Parameters'].keys(): + top_key = 'Parameters' + _choice =self.settings.data[top_key][key]['data']['default'] _values = self.settings.data[top_key][key]['data']['value'] - if isinstance(_choice, (str, bytes)): + if isinstance(_choice, (str, bytes)): _idx = _values.index(_choice) elif isinstance(_choice, int): _idx = _choice if _choice < len(_values) else 0 @@ -1699,72 +1681,70 @@ class GUIFrame(QWidget): rblist[_idx].toggled.emit(True) return line ''' - + def qtab_wgt(self, key, irow, wgt_grid, stacked=False): - if key in self.settings.data["Expert"].keys(): - top_key = "Expert" - elif key in self.settings.data["Parameters"].keys(): - top_key = "Parameters" + if key in self.settings.data['Expert'].keys(): + top_key = 'Expert' + elif key in self.settings.data['Parameters'].keys(): + top_key = 'Parameters' def emboss(): - line.title = title - line.key = inner_key - line.val = value + line.title = title + line.key = inner_key + line.val = value def check_cb(new_value): - sender= self.sender() + sender = self.sender() self.parent.input_parameters[sender.title][sender.key] = new_value - - + def line_cb(new_value): - sender= self.sender() + sender = self.sender() self.parent.input_parameters[sender.title][sender.key] = new_value def on_radiobutton_change(new_value): sender = self.sender() - #print("rb callback ", new_value, sender.isChecked(), sender.val, flush=True) if sender.isChecked(): - self.parent.input_parameters[sender.title][sender.key] = sender.val + self.parent.input_parameters[sender.title][ + sender.key] = sender.val - def on_tab_change(new_idx): sender_tab = self.sender().qtab_widget_dict[new_idx].title meas_line.setText(sender_tab) try: - _color = self.settings.data[top_key][key]["data"]["color"][ - new_idx] + _color = self.settings.data[top_key][key]['data']["color"][ + new_idx] except KeyError as ex: _color = "black" except IndexError as ex: _color = "black" meas_line.setStyleSheet("color: {0}".format(_color)) - - for i in range (0, self.sender().count()): + + for i in range(0, self.sender().count()): if i == new_idx: try: self.sender().tabBar().setTabTextColor(new_idx, QColor(_color)) except AttributeError: - #May be a QStackedWidget which does not have tabBar + # May be a QStackedWidget which does not have tabBar pass - + else: try: self.sender().tabBar().setTabTextColor(i, QColor("black")) except AttributeError: - #May be a QStackedWidget which does not have tabBar - pass - + # May be a QStackedWidget which does not have tabBar + pass + self.parent.input_parameters[key] = sender_tab - + qtab_widget = QTabWidget() if not stacked else QStackedWidget() - qtab_widget_dict = {} + qtab_widget_dict = {} itab = 0 longest_title = "short" - link = self.settings.data[top_key][key]["data"]["link"] + link = self.settings.data[top_key][key]['data']["link"] for title, tab in self.settings.data[link].items(): lo = QGridLayout() @@ -1773,19 +1753,19 @@ class GUIFrame(QWidget): _irowspan = 1 tab_height = 0 if len(title) > len(longest_title): - longest_title = title + longest_title = title self.parent.input_parameters[title] = {} - + for inner_key, param in tab.items(): - tab_height +=32 - wgt_type = param["data"]["widget"] - text = param["data"]["text"] - - if "value" in param["data"]: - value = param["data"]["value"] - elif "link" in param["data"]: - link_list = param["data"]["link"] - + tab_height += 32 + wgt_type = param['data']['widget'] + text = param['data']["text"] + + if 'value' in param['data']: + value = param['data']['value'] + elif "link" in param['data']: + link_list = param['data']["link"] + if len(link_list) == 1: value = self.settings.data[link_list[0]] print("values", value, flush=True) @@ -1793,9 +1773,10 @@ class GUIFrame(QWidget): bottom_leaf = self.settings.data[link_list[0]] for link_item in link_list[1:]: bottom_leaf = bottom_leaf[link_item] - value = bottom_leaf - + value = bottom_leaf + label = None + def add_label(): label = QLabel(text) label.setFixedHeight(24) @@ -1814,10 +1795,10 @@ class GUIFrame(QWidget): line = QDoubleSpinBox() label = add_label() emboss() - self.prepare_qdoublespinbox(line, value, link, title, + self.prepare_qdoublespinbox(line, value, link, title, inner_key) line.valueChanged.connect(line_cb) - line.valueChanged.emit(value) + line.valueChanged.emit(value) elif "QLineEdit" in wgt_type: line = QLineEdit() label = add_label() @@ -1837,7 +1818,7 @@ class GUIFrame(QWidget): emboss() self.prepare_qcheckbox(line, value, link, title, inner_key) line.stateChanged.connect(check_cb) - line.stateChanged.emit(bool(value)) + line.stateChanged.emit(bool(value)) elif "QComboBox" in wgt_type: line = QComboBox() label = add_label() @@ -1846,36 +1827,36 @@ class GUIFrame(QWidget): line.currentTextChanged.connect(line_cb) line.setCurrentIndex(0) line.currentTextChanged.emit(value[0]) - elif "QRadioButton" in wgt_type: + elif "QRadioButton" in wgt_type: tab_height += 32 _irowspan = 2 - line = self.prepare_qradiobutton(value, link, title, + line = self.prepare_qradiobutton(value, link, title, inner_key) - #emboss() + # emboss() rblist = line.findChildren(QRadioButton) for rb in rblist: rb.toggled.connect(on_radiobutton_change) - if "startIdx" in param["data"]: - start_idx = param["data"]["startIdx"] + if "startIdx" in param['data']: + start_idx = param['data']["startIdx"] else: start_idx = 0 rblist[start_idx].setChecked(True) rblist[start_idx].toggled.emit(True) - - icol = 0 + + icol = 0 icolspan = 3 if label: lo.addWidget(label, _irow, icol, _irowspan, 1, - Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) + Qt.AlignmentFlag( + Qt.AlignLeft | Qt.AlignVCenter)) icol += 1 lo.addWidget(line, _irow, icol, _irowspan, icolspan, - Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) + Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) #print(title, tab) #print(key, line, icolumn, wgt_type, text, flush=True) _irow += 1 - - - qw.setLayout(lo) + + qw.setLayout(lo) qw.setFixedHeight(tab_height) qtab_widget_dict[itab] = qw qtab_widget_dict[itab].title = title @@ -1883,49 +1864,45 @@ class GUIFrame(QWidget): qtab_widget.addTab(qtab_widget_dict[itab], title) else: qtab_widget.addWidget(qtab_widget_dict[itab]) - + itab += 1 qtab_widget.qtab_widget_dict = qtab_widget_dict - meas_label = QLabel() meas_label.setFixedHeight(24) meas_label.setFont(self.font_pts10) meas_label.setContentsMargins(0, 0, 0, 0) - meas_label.setText(self.settings.data[top_key][key]["data"]["text"]) + meas_label.setText(self.settings.data[top_key][key]['data']["text"]) meas_line = QLineEdit() - meas_line.setObjectName("Read") - + meas_line.setObjectName("Read") + fm = QFontMetricsF(meas_line.font()) - param_width = fm.maxWidth() * len(longest_title) - meas_line.setMaximumWidth(int(param_width*0.5)) + param_width = fm.maxWidth() * len(longest_title) + meas_line.setMaximumWidth(int(param_width * 0.5)) qtab_widget.setContentsMargins(0, 0, 0, 0) qtab_widget.currentChanged.connect(on_tab_change) - _default_idx = self.settings.data[top_key][key]["data"]["value"] + _default_idx = self.settings.data[top_key][key]['data']['value'] qtab_widget.setCurrentIndex(_default_idx) qtab_widget.currentChanged.emit(_default_idx) - final_wgt = QWidget() final_lo = QGridLayout() - - final_wgt.setContentsMargins(0, 0, 0, 0) #0, 40, 0, 0 + + final_wgt.setContentsMargins(0, 0, 0, 0) # 0, 40, 0, 0 final_lo.addWidget(meas_label, 0, 0, 1, 2, - Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) + Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) final_lo.addWidget(meas_line, 0, 2, 1, 2, - Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) + Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) qHLine = QHLine() qHLine.setFixedHeight(10) final_lo.addWidget(qHLine, 1, 0, 1, 4) final_lo.addWidget(qtab_widget, 2, 0, 1, 4, - Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) - + Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) + final_wgt.setLayout(final_lo) - - - return final_wgt, qtab_widget # - + + return final_wgt, qtab_widget def pv_stacked_wgt(self, pvlist, title, default_value, key, object_name): """GUI Input Widget""" @@ -1938,20 +1915,19 @@ class GUIFrame(QWidget): self.cafe.setGetActionWhenMonitorPolicy( pv, self.cyca.GET_FROM_CACHE) - stack_list = [] + stack_list = [] for pv, head, val, obj in zip(pvlist, title, default_value, object_name): stack, radiobutton_list = self.pv_selector_wgt( title=head, key=key, pv=pv, manual_value=val) self.stack_radiolist_dict[stack] = radiobutton_list - + stack_list.append(stack) stack.setObjectName(obj) stack.style().polish(stack) stacked_widget.addWidget(stack) - - + stacked_widget.setMaximumHeight(320) self.stacked_wgt_dict[stacked_widget] = stack_list return stacked_widget @@ -1959,7 +1935,7 @@ class GUIFrame(QWidget): def pv_energy_stacked_wgt(self): pvlist = self.settings.data["EnergyStackedWgt"]["pvlist"] title = self.settings.data["EnergyStackedWgt"]["title"] - default_value = self.settings.data["EnergyStackedWgt"]["value"] + default_value = self.settings.data["EnergyStackedWgt"]['value'] key = self.settings.data["EnergyStackedWgt"]["key"] object_name = self.settings.data["EnergyStackedWgt"]["objectName"] self.energy_stacked_widget = self.pv_stacked_wgt( @@ -1973,11 +1949,10 @@ class GUIFrame(QWidget): return self.energy_stacked_widget - def pv_phase_stacked_wgt(self): pvlist = self.settings.data["PhaseStackedWgt"]["pvlist"] title = self.settings.data["PhaseStackedWgt"]["title"] - default_value = self.settings.data["PhaseStackedWgt"]["value"] + default_value = self.settings.data["PhaseStackedWgt"]['value'] key = self.settings.data["PhaseStackedWgt"]["key"] object_name = self.settings.data["PhaseStackedWgt"]["objectName"] self.phase_stacked_widget = self.pv_stacked_wgt( @@ -1991,7 +1966,6 @@ class GUIFrame(QWidget): return self.phase_stacked_widget - def pv_selector_wgt(self, title="Select", key="beamEnergy", pv=None, manual_value="", monitor=True, read=True, manual=True): group_box = QGroupBox(title) @@ -2004,33 +1978,32 @@ class GUIFrame(QWidget): radiobutton_list = [None] * len(radiobutton_title) pv_local = pv monitor_pv = None - + def cb_pv_selector(value): value_str = radio_buddy_text_dict[self.sender()].text() #print("cb_pv_selector", value_str) - #Find which group the radio button belongs to: - #Find which stack the group belongs to: - #Set this to the current stack? + # Find which group the radio button belongs to: + # Find which stack the group belongs to: + # Set this to the current stack? for k, v in self.stack_radiolist_dict.items(): if self.sender() in v: - #get groupbox from key + # get groupbox from key for k2, v2 in self.stacked_wgt_dict.items(): if k in v2: - self.current_stacked_wgt_dict[k2] = pv_local #self.sender() - #print("Current STACK FOUND") - + # self.sender() + self.current_stacked_wgt_dict[k2] = pv_local + #print("Current STACK FOUND") + self.radio_stack_dict[self.sender()] = value if not value_str: print("Fired on Initialization when not connected", value) print("sender", self.sender()) print("radio_buddy_text", radio_buddy_text_dict) - print("value", radio_buddy_text_dict[self.sender()].text()) + print('value', radio_buddy_text_dict[self.sender()].text()) self.input_parameters[key] = 0 return - - if hasattr(radio_buddy_text_dict[self.sender()], "pv_info"): dt = radio_buddy_text_dict[self.sender()].pv_info.dataType @@ -2039,9 +2012,6 @@ class GUIFrame(QWidget): self.cyca.CY_DBR_CHAR]: value_input = re.findall(r"-?\d+\.?\d*", value_str) - - - if dt in [self.cyca.CY_DBR_FLOAT, self.cyca.CY_DBR_DOUBLE]: self.input_parameters[key] = float(value_input[0]) elif dt in [self.cyca.CY_DBR_SHORT, self.cyca.CY_DBR_LONG]: @@ -2051,7 +2021,6 @@ class GUIFrame(QWidget): else: self.input_parameters[key] = value_str - for irow, (radio, flag) in enumerate(zip(radiobutton_list, radiobutton_flag)): radio = QRadioButton("") @@ -2066,22 +2035,22 @@ class GUIFrame(QWidget): ql = QLabel(radiobutton_title[0]) ql.setFont(self.font_pts10) ql.setFixedHeight(self.widget_height) - ql.setAlignment(Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) + ql.setAlignment(Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) grid.addWidget(ql, 0, 1) if manual: ql = QLabel(radiobutton_title[2]) ql.setFont(self.font_pts10) ql.setFixedHeight(self.widget_height) - ql.setAlignment(Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) + ql.setAlignment(Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) grid.addWidget(ql, 2, 1) def mon_cb(handle, pvname, pvdata): if monitor_pv is not None: monitor_pv.py_monitor_callback(handle, pvname, pvdata) - + if pvname in self.current_stacked_wgt_dict.values() and \ - radiobutton_list[0].isChecked(): # + radiobutton_list[0].isChecked(): self.input_parameters[key] = pvdata.value[0] if monitor: @@ -2089,7 +2058,7 @@ class GUIFrame(QWidget): show_units=True) monitor_pv.setAlignment( - Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) + Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) monitor_pv.setFont(self.font_pts10) monitor_pv.setFixedHeight(self.widget_height) monitor_pv.setFixedWidth(122) @@ -2098,7 +2067,9 @@ class GUIFrame(QWidget): if read: read_pv = CAQLabel(self, pv_name=pv, pv_within_daq_group=True, color_mode="static", show_units=True) - read_pv.setAlignment(Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) + read_pv.setAlignment( + Qt.AlignmentFlag( + Qt.AlignLeft | Qt.AlignVCenter)) read_pv.setFont(self.font_pts10) init_value = self.cafe.getCache(pv) @@ -2117,11 +2088,11 @@ class GUIFrame(QWidget): if init_value is not None: #value_str = read_pv.format_display_value(init_value) - #read_pv.setText(str(value_str)) - #print(len(read_pv.text())) + # read_pv.setText(str(value_str)) + # print(len(read_pv.text())) #val = re.findall(r'-?\d+\.?\d*', value_str) #print (val) - #val[0] = val[0] #add space that we stripped off + # val[0] = val[0] #add space that we stripped off read_pv.receive_monitor_update(init_value, pvdata.status, pvdata.alarmSeverity) @@ -2139,33 +2110,33 @@ class GUIFrame(QWidget): def update_manual_value(new_text): if radiobutton_list[2].isChecked(): - radiobutton_list[2].toggled.emit(True) + radiobutton_list[2].toggled.emit(True) if manual: manual_wgt = QLineEdit(str(manual_value)) manual_wgt.setObjectName("WriteCenter") manual_wgt.textChanged.connect(update_manual_value) manual_wgt.setAlignment( - Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) + Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) manual_wgt.setFixedHeight(self.widget_height) manual_wgt.setFixedWidth(74) grid.addWidget(manual_wgt, 2, 2) ql = QLabel(self.cafe.getUnits(pv)) ql.setFont(self.font_pts10) ql.setFixedHeight(self.widget_height) - ql.setAlignment(Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) + ql.setAlignment(Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) grid.addWidget(ql, 2, 3) - grid.setContentsMargins(5, 10, 5, 0) + grid.setContentsMargins(5, 10, 5, 0) #grid.setContentsMargins(9, 15, 9, 0) - grid.setAlignment(Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) + grid.setAlignment(Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) grid.setVerticalSpacing(2) grid.setHorizontalSpacing(4) group_box.setContentsMargins(0, 0, 0, 0) group_box.setMaximumWidth(280) group_box.setMaximumHeight(320) group_box.setFont(self.font_pts10) - group_box.setAlignment(Qt.AlignmentFlag(Qt.AlignTop|Qt.AlignHCenter)) + group_box.setAlignment(Qt.AlignmentFlag(Qt.AlignTop | Qt.AlignHCenter)) group_box.setLayout(grid) if monitor: @@ -2175,35 +2146,33 @@ class GUIFrame(QWidget): if manual: radio_buddy_text_dict[radiobutton_list[2]] = manual_wgt - idx = 0 #1 if read else 0 + idx = 0 # 1 if read else 0 #print("idx", idx) - #print(radio_buddy_text_dict) + # print(radio_buddy_text_dict) radiobutton_list[idx].setChecked(True) radiobutton_list[idx].toggled.emit(True) return group_box, radiobutton_list - def input_wgt_logging(self, irow, wgt_grid): - tooltip = "Select logging level, CRITICAL=50, DEBUG=10" - value = ['CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG'] #NOTSET=0 - label = QLabel("Logging level:") + tooltip = 'Select logging level, CRITICAL=50, DEBUG=10' + value = ['CRITICAL', 'ERROR', 'WARNING', 'INFO', 'DEBUG'] # NOTSET=0 + label = QLabel('Logging level:') label.setFixedHeight(24) label.setFont(self.font_pts10) label.setContentsMargins(5, 0, 0, 0) label.setToolTip(tooltip) - return self.input_wgt_qcombobox(label, "loggingLevel", value, irow, + return self.input_wgt_qcombobox(label, 'loggingLevel', value, irow, wgt_grid) - def input_wgt_qcombobox(self, label, key, value, irow, wgt_grid): suggested = "WW" - if key in self.settings.data["Expert"].keys(): - top_key = "Expert" - elif key in self.settings.data["Parameters"].keys(): - top_key = "Parameters" + if key in self.settings.data['Expert'].keys(): + top_key = 'Expert' + elif key in self.settings.data['Parameters'].keys(): + top_key = 'Parameters' else: - top_key = "Expert" + top_key = 'Expert' def combo_cb(new_text): self.input_parameters[key] = new_text @@ -2223,7 +2192,6 @@ class GUIFrame(QWidget): param_width = max(fm.width(str(value_for_width)), fm.width(suggested)) line.setFixedWidth(int(param_width + 56)) line.setObjectName("Write") - if key in self.settings.data[top_key]: if "layout" in self.settings.data[top_key][key]['data']: @@ -2239,14 +2207,15 @@ class GUIFrame(QWidget): label.setAlignment(Qt.AlignBottom) else: box = QHBoxLayout() - label.setAlignment(Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) + label.setAlignment( + Qt.AlignmentFlag( + Qt.AlignLeft | Qt.AlignVCenter)) box.setAlignment(Qt.AlignCenter) box.addWidget(label) box.addWidget(line) - - - if self.grid_loc: + + if self.grid_loc: a = self.grid_loc[0] b = self.grid_loc[1] c = self.grid_loc[2] @@ -2257,10 +2226,10 @@ class GUIFrame(QWidget): c = 1 d = 3 - if 'loggingLevel' not in key: + if 'loggingLevel' not in key: wgt_grid.addLayout(box, a, b, c, d, - Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) - + Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) + return box if 'loggingLevel' in key else line def input_wgt_qradiobutton(self, key, value, irow, wgt_grid): @@ -2268,12 +2237,11 @@ class GUIFrame(QWidget): radio_button = self.sender() if radio_button.isChecked(): self.parent.input_parameters[key] = radio_button.target - #print("KEY================", key, self.parent.input_parameters[key], new_value) - if key in self.settings.data["Expert"].keys(): - top_key = "Expert" - elif key in self.settings.data["Parameters"].keys(): - top_key = "Parameters" + if key in self.settings.data['Expert'].keys(): + top_key = 'Expert' + elif key in self.settings.data['Parameters'].keys(): + top_key = 'Parameters' if 'forwardLink' in self.settings.data[top_key][key]['data']: link = self.settings.data[top_key][key]['data'][ @@ -2293,7 +2261,8 @@ class GUIFrame(QWidget): value_list[0]) elif self.settings.data[top_key][item]['data'][ 'widget'] in 'QLineEdit': - self.line_sender_dict[item].setText(str(value_list)) + self.line_sender_dict[item].setText( + str(value_list)) line = self.radio_buttons(key=key, options=value) line.setContentsMargins(0, 0, 0, 0) @@ -2303,7 +2272,7 @@ class GUIFrame(QWidget): for rb in rblist: rb.toggled.connect(on_radiobutton_change) - if self.grid_loc: + if self.grid_loc: a = self.grid_loc[0] b = self.grid_loc[1] c = self.grid_loc[2] @@ -2312,22 +2281,22 @@ class GUIFrame(QWidget): a = irow b = 0 c = 1 - d = 4 + d = 4 wgt_grid.addWidget(line, a, b, c, d, Qt.AlignLeft) - _idx=0 + _idx = 0 try: - if key in self.settings.data["Expert"].keys(): - top_key = "Expert" - elif key in self.settings.data["Parameters"].keys(): - top_key = "Parameters" - _choice =self.settings.data[top_key][key]['data']['default'] + if key in self.settings.data['Expert'].keys(): + top_key = 'Expert' + elif key in self.settings.data['Parameters'].keys(): + top_key = 'Parameters' + _choice = self.settings.data[top_key][key]['data']['default'] _values = self.settings.data[top_key][key]['data']['value'] - if isinstance(_choice, (str, bytes)): + if isinstance(_choice, (str, bytes)): _idx = _values.index(_choice) - elif isinstance(_choice, int): + elif isinstance(_choice, int): _idx = _choice if _choice < len(_values) else 0 except KeyError: pass @@ -2345,34 +2314,32 @@ class GUIFrame(QWidget): if self.pipeline_group_box is not None: self.pipeline_group_box.setEnabled(bool(new_value)) - line = QCheckBox(label_text) line.stateChanged.connect(check_cb) - #line.toggled.connect(check_cb) + # line.toggled.connect(check_cb) line.setChecked(Qt.Checked if value else Qt.Unchecked) - + line.setMaximumWidth(320) line.setMinimumWidth(100) line.setFixedHeight(28) - - - if key in self.settings.data["Expert"].keys(): - top_key = "Expert" - elif key in self.settings.data["Parameters"].keys(): - top_key = "Parameters" + + if key in self.settings.data['Expert'].keys(): + top_key = 'Expert' + elif key in self.settings.data['Parameters'].keys(): + top_key = 'Parameters' col_wdt = 4 try: - orientation = self.settings.data[top_key][key]["data"][ + orientation = self.settings.data[top_key][key]['data'][ "orientation"] orientation = Qt.RightToLeft if "RightToLeft" in orientation \ - else Qt.LeftToRight - line.setLayoutDirection(orientation) - col_wdt=3 + else Qt.LeftToRight + line.setLayoutDirection(orientation) + col_wdt = 3 except KeyError: pass - if self.grid_loc: + if self.grid_loc: a = self.grid_loc[0] b = self.grid_loc[1] c = self.grid_loc[2] @@ -2381,28 +2348,27 @@ class GUIFrame(QWidget): a = irow b = 0 c = 1 - d = col_wdt + d = col_wdt - wgt_grid.addWidget(line, a, b, c, d, Qt.AlignLeft | Qt.AlignVCenter) + wgt_grid.addWidget(line, a, b, c, d, Qt.AlignLeft | Qt.AlignVCenter) #line.stateChanged.emit(Qt.Checked if value else Qt.Unchecked) - + return line def input_wgt_qlabel(self, value, irow, wgt_grid): - #Read only has no callback + # Read only has no callback suggested = "WWWW" line = QLabel() - line.setText(str(value)) #"{0: 3.1f}".format(value)) + line.setText(str(value)) # "{0: 3.1f}".format(value)) line.setFixedHeight(24) - line.setAlignment(Qt.AlignmentFlag(Qt.AlignRight|Qt.AlignBottom)) + line.setAlignment(Qt.AlignmentFlag(Qt.AlignRight | Qt.AlignBottom)) line.setStyleSheet("QLabel{text-align: right}") fm = QFontMetricsF(line.font()) param_width = max(fm.width(str(value)), fm.width(suggested)) line.setMaximumWidth(int(param_width + 40)) - - if self.grid_loc: + if self.grid_loc: a = self.grid_loc[0] b = self.grid_loc[1] c = self.grid_loc[2] @@ -2411,9 +2377,8 @@ class GUIFrame(QWidget): a = irow b = 0 c = 1 - d = 4 - wgt_grid.addWidget(line, a, b, c, d) - + d = 4 + wgt_grid.addWidget(line, a, b, c, d) return line @@ -2424,17 +2389,17 @@ class GUIFrame(QWidget): suggested = "WW" line = QLineEdit() line.setObjectName("Read") - line.setText(str(value)) #"{0: 3.1f}".format(value)) + line.setText(str(value)) # "{0: 3.1f}".format(value)) line.setFixedHeight(26) line.textChanged.connect(line_cb) - #line.textEdited.connect(line_cb) + # line.textEdited.connect(line_cb) line.textChanged.emit(str(value)) - - line.setAlignment(Qt.AlignmentFlag(Qt.AlignRight|Qt.AlignBottom)) - line.setStyleSheet("QLabel{text-align: right}") - + + line.setAlignment(Qt.AlignmentFlag(Qt.AlignRight | Qt.AlignBottom)) + line.setStyleSheet('QLabel{text-align: right}') + try: - w =self.settings.data["Parameters"][key]["data"]["width"] + w = self.settings.data['Parameters'][key]['data']['width'] line.setFixedWidth(w) except KeyError: fm = QFontMetricsF(line.font()) @@ -2445,8 +2410,7 @@ class GUIFrame(QWidget): qframe_buffer = QFrame() qframe_buffer.setFixedWidth(3) - - if self.grid_loc: + if self.grid_loc: a = self.grid_loc[0] b = self.grid_loc[1] c = self.grid_loc[2] @@ -2455,19 +2419,19 @@ class GUIFrame(QWidget): a = irow b = 0 c = 1 - d = 1 + d = 1 wgt_grid.addWidget(label, a, b, c, d, - Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) - wgt_grid.addWidget(qframe_buffer, a, b+1, c, d, - Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) - wgt_grid.addWidget(line, a, b+2, c, d, - Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) + Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) + wgt_grid.addWidget(qframe_buffer, a, b + 1, c, d, + Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) + wgt_grid.addWidget(line, a, b + 2, c, d, + Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) return line def input_wgt_qlineedit(self, key, value, label, irow, wgt_grid): def line_cb(new_value): - self.parent.input_parameters[key] = new_value + self.parent.input_parameters[key] = new_value line = QLineEdit() line.setObjectName("Write") line.setFixedHeight(24) @@ -2477,8 +2441,8 @@ class GUIFrame(QWidget): param_width = fm.width(str(value)) extra_width = 22 if len(str(value)) < 16 else 26 line.setFixedWidth(int(param_width + extra_width)) - - if self.grid_loc: + + if self.grid_loc: a = self.grid_loc[0] b = self.grid_loc[1] c = self.grid_loc[2] @@ -2487,16 +2451,15 @@ class GUIFrame(QWidget): a = irow b = 0 c = 1 - d = 2 + d = 2 wgt_grid.addWidget(label, a, b, c, d, - Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) - wgt_grid.addWidget(line, a, b+2, c, d, - Qt.AlignmentFlag(Qt.AlignLeft|Qt.AlignVCenter)) + Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) + wgt_grid.addWidget(line, a, b + 2, c, d, + Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) return line - def input_wgt_qdoublespinbox(self, key, value, label, irow, wgt_grid): def line_cb(new_value): self.parent.input_parameters[key] = new_value @@ -2508,31 +2471,31 @@ class GUIFrame(QWidget): line.valueChanged.connect(line_cb) line.setValue(value) - if key in self.settings.data["Expert"].keys(): - top_key = "Expert" - elif key in self.settings.data["Parameters"].keys(): - top_key = "Parameters" + if key in self.settings.data['Expert'].keys(): + top_key = 'Expert' + elif key in self.settings.data['Parameters'].keys(): + top_key = 'Parameters' + + min_val = self.settings.data[top_key][key]['data']["min"] + max_val = self.settings.data[top_key][key]['data']["max"] + step = self.settings.data[top_key][key]['data']["step"] - min_val = self.settings.data[top_key][key]["data"]["min"] - max_val = self.settings.data[top_key][key]["data"]["max"] - step = self.settings.data[top_key][key]["data"]["step"] - try: - if 'tooltip' in self.settings.data[top_key][key]["data"]: - label.setToolTip(self.settings.data[top_key][key]["data"][ + if 'tooltip' in self.settings.data[top_key][key]['data']: + label.setToolTip(self.settings.data[top_key][key]['data'][ "tooltip"]) except KeyError: pass decimal = Decimal(str(step)) - line.setDecimals(abs(decimal.as_tuple().exponent)) #precision + line.setDecimals(abs(decimal.as_tuple().exponent)) # precision line.setRange(min_val, max_val) line.setSingleStep(step) fm = QFontMetricsF(line.font()) param_width = max(fm.width(str(decimal)), fm.width(suggested)) line.setMaximumWidth(int(param_width + 40)) - - if self.grid_loc: + + if self.grid_loc: a = self.grid_loc[0] b = self.grid_loc[1] c = self.grid_loc[2] @@ -2541,15 +2504,14 @@ class GUIFrame(QWidget): a = irow b = 0 c = 1 - d = 2 + d = 2 wgt_grid.addWidget(label, a, b, c, d, - Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) - wgt_grid.addWidget(line, a, b+2, c, d, + Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) + wgt_grid.addWidget(line, a, b + 2, c, d, Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) return line - def input_wgt_qspinbox(self, key, value, label, irow, wgt_grid): def line_cb(new_value): self.parent.input_parameters[key] = new_value @@ -2560,23 +2522,22 @@ class GUIFrame(QWidget): line.setFixedHeight(24) line.valueChanged.connect(line_cb) line.setValue(value) - if key in self.settings.data["Expert"].keys(): - top_key = "Expert" - elif key in self.settings.data["Parameters"].keys(): - top_key = "Parameters" - - min_val = self.settings.data[top_key][key]["data"]["min"] - max_val = self.settings.data[top_key][key]["data"]["max"] - step = self.settings.data[top_key][key]["data"]["step"] + if key in self.settings.data['Expert'].keys(): + top_key = 'Expert' + elif key in self.settings.data['Parameters'].keys(): + top_key = 'Parameters' + min_val = self.settings.data[top_key][key]['data']["min"] + max_val = self.settings.data[top_key][key]['data']["max"] + step = self.settings.data[top_key][key]['data']["step"] line.setRange(min_val, max_val) line.setSingleStep(step) fm = QFontMetricsF(line.font()) param_width = max(fm.width(str(max_val)), fm.width(suggested)) line.setMaximumWidth(int(param_width + 40)) - - if self.grid_loc: + + if self.grid_loc: a = self.grid_loc[0] b = self.grid_loc[1] c = self.grid_loc[2] @@ -2585,11 +2546,11 @@ class GUIFrame(QWidget): a = irow b = 0 c = 1 - d = 2 + d = 2 wgt_grid.addWidget(label, a, b, c, d, - Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) - wgt_grid.addWidget(line, a, b+2, c, d, + Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) + wgt_grid.addWidget(line, a, b + 2, c, d, Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) return line @@ -2601,7 +2562,7 @@ class GUIFrame(QWidget): qframe_bottom = QFrame() qframe_bottom.setFixedHeight(3) - if self.grid_loc: + if self.grid_loc: a = self.grid_loc[0] b = self.grid_loc[1] c = self.grid_loc[2] @@ -2613,13 +2574,11 @@ class GUIFrame(QWidget): d = 4 wgt_grid.addWidget(qframe_top, a, b, c, d, - Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) - wgt_grid.addWidget(stacked_wgt, a+1, b, c+3, d, Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) - wgt_grid.addWidget(qframe_bottom, a+2, b, c, d, - Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) - - + wgt_grid.addWidget(stacked_wgt, a + 1, b, c + 3, d, + Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) + wgt_grid.addWidget(qframe_bottom, a + 2, b, c, d, + Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) return stacked_wgt @@ -2630,8 +2589,7 @@ class GUIFrame(QWidget): qframe_bottom = QFrame() qframe_bottom.setFixedHeight(3) - - if self.grid_loc: + if self.grid_loc: a = self.grid_loc[0] b = self.grid_loc[1] c = self.grid_loc[2] @@ -2641,23 +2599,21 @@ class GUIFrame(QWidget): b = 0 c = 1 d = 4 - wgt_grid.addWidget(qframe_top, a, b, c, d, Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) - wgt_grid.addWidget(stacked_wgt, a+1, b, c+3, d, + wgt_grid.addWidget(stacked_wgt, a + 1, b, c + 3, d, Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) - wgt_grid.addWidget(qframe_bottom, a+2, b, c, d, + wgt_grid.addWidget(qframe_bottom, a + 2, b, c, d, Qt.AlignmentFlag(Qt.AlignLeft | Qt.AlignVCenter)) - return stacked_wgt def input_wgt_qhline(self, irow, wgt_grid): qHLine = QHLine() qHLine.setFixedHeight(10) - - if self.grid_loc: + + if self.grid_loc: a = self.grid_loc[0] b = self.grid_loc[1] c = self.grid_loc[2] @@ -2668,16 +2624,15 @@ class GUIFrame(QWidget): c = 1 d = 4 wgt_grid.addWidget(qHLine, a, b, c, d) - def input_wgt_qvline(self, irow, wgt_grid): qVLine = QVLine() - + qVLine.setFixedWidth(20) - + qVLine.setFixedHeight(int(17 * wgt_grid.rowCount())) - - if self.grid_loc: + + if self.grid_loc: a = self.grid_loc[0] b = self.grid_loc[1] c = self.grid_loc[2] @@ -2690,12 +2645,11 @@ class GUIFrame(QWidget): wgt_grid.addWidget(qVLine, a, b, c, d) - def input_wgt_frame(self, irow, wgt_grid): qFrame = QFrame() qFrame.setFixedHeight(10) - - if self.grid_loc: + + if self.grid_loc: a = self.grid_loc[0] b = self.grid_loc[1] c = self.grid_loc[2] @@ -2707,7 +2661,6 @@ class GUIFrame(QWidget): d = 4 wgt_grid.addWidget(qHLine, a, b, c, d) - def input_wgt(self, buddy, label, key, value, irow=0, wgt_grid=None,): if wgt_grid is None: @@ -2722,7 +2675,7 @@ class GUIFrame(QWidget): line = None qtab = None - #Add callbacksand actions + # Add callbacksand actions if buddy == "QComboBox".upper(): line = self.input_wgt_qcombobox(label, key, value, irow, wgt_grid) @@ -2757,7 +2710,7 @@ class GUIFrame(QWidget): self.input_wgt_qhline(irow, wgt_grid) elif buddy == "QVLine".upper(): - self.input_wgt_qvline(irow, wgt_grid) + self.input_wgt_qvline(irow, wgt_grid) elif buddy == "QFrame".upper(): self.input_wgt_qframe(irow, wgt_grid) @@ -2765,8 +2718,8 @@ class GUIFrame(QWidget): elif buddy == "QTabWidget".upper(): #print("buddy/label", buddy, label, key, value, flush=True) line, qtab = self.qtab_wgt(key, irow, wgt_grid) - - if self.grid_loc: + + if self.grid_loc: a = self.grid_loc[0] b = self.grid_loc[1] c = self.grid_loc[2] @@ -2776,14 +2729,14 @@ class GUIFrame(QWidget): b = 0 c = 1 d = 4 - + wgt_grid.addWidget(line, a, b, c, d, Qt.AlignLeft | Qt.AlignVCenter) elif buddy == "QStackedWidget".upper(): #print("buddy/label", buddy, label, key, value, flush=True) line, qtab = self.qtab_wgt(key, irow, wgt_grid, stacked=True) - - if self.grid_loc: + + if self.grid_loc: a = self.grid_loc[0] b = self.grid_loc[1] c = self.grid_loc[2] @@ -2793,14 +2746,14 @@ class GUIFrame(QWidget): b = 0 c = 1 d = 4 - + wgt_grid.addWidget(line, a, b, c, d, - Qt.AlignLeft | Qt.AlignVCenter) + Qt.AlignLeft | Qt.AlignVCenter) else: wgt_list = ["QCheckBox", "QComboBox", "QDoubleSpinBox", "QFrame", "QHLine", "QLabel", "QLineEdit", "QLineRead", "QRadioButton", "QSpinBox", "QStackedWiodget", - "QTabWidget","QVLine", "QPhaseStackedWidget", + "QTabWidget", "QVLine", "QPhaseStackedWidget", "QEnergyStackedWidget"] print("Widget {0} is not Supported".format(buddy)) print("Supported widgets are: {0}".format(wgt_list)) @@ -2811,37 +2764,35 @@ class GUIFrame(QWidget): elif line is not None: self.line_sender_dict[key] = line - - def enter_input_parameters(self): - #"undulator": {"flag": 0, "data" : - #{"widget": "None", "text" : "Target:", "value" : "Aramis"}}, - #"deflector": {"flag": 1, "data" : - #{"widget": "QComboBox", "text" : "RF Tranverse Deflector:", - # "forwardLink": ["RFDeflector"]}}, - #profileMonitor": {"flag": 1, "data" : - #{"widget": "QComboBox", "text" : "Profile Monitor:", - # "link": ["RFDeflector", "SINDI01", "profileMonitor"] - #json input "Parameters" key + # "undulator": {"flag": 0, 'data' : + # {'widget': "None", "text" : "Target:", 'value' : "Aramis"}}, + # "deflector": {"flag": 1, 'data' : + # {'widget': "QComboBox", "text" : "RF Tranverse Deflector:", + # "forwardLink": ["RFDeflector"]}}, + # profileMonitor": {"flag": 1, 'data' : + # {'widget': "QComboBox", "text" : "Profile Monitor:", + # "link": ["RFDeflector", "SINDI01", "profileMonitor"] + # json input 'Parameters' key # All key values added to self.input_parameters - #flag 1: add to self.input_parameters for analysis thread - #widget None: does not add widget into container - #text: Will add label to a widget - #forwardLink: Will substitute for target and execute - #link: Will substitute for target - #operator + # flag 1: add to self.input_parameters for analysis thread + # widget None: does not add widget into container + # text: Will add label to a widget + # forwardLink: Will substitute for target and execute + # link: Will substitute for target + # operator self.operator_parameters_group = self.operator_parameters_groupbox() if self.facility == Facility.SwissFEL: try: - if self.settings.data["Parameters"]["undulator"]["flag"]: + if self.settings.data['Parameters']["undulator"]["flag"]: self.operator_parameters_group.layout().addWidget( self.parent.gui_header.operator_group_header()) except KeyError: pass def draw_widget(buddy): - flag = self.settings.data["Parameters"][key]["flag"] + flag = self.settings.data['Parameters'][key]["flag"] if buddy == "NONE": return False elif buddy not in ["QHLINE", "QVLINE", "QFRAME"] and not flag: @@ -2850,65 +2801,64 @@ class GUIFrame(QWidget): ##in_j = 0 - for (key, val), label in zip(self.all_input_parameters.items(), - self.all_input_labels.values()): + for (key, val), label in zip(self.all_input_parameters.items(), + self.all_input_labels.values()): buddy = self.settings.data[ - "Parameters"][key]["data"]["widget"].upper() + 'Parameters'][key]['data']['widget'].upper() j = self.input_wgt_grid.rowCount() - ##if j > 4: + # if j > 4: ## self.input_wgt_grid_column = 6 ## in_j += 1 - ##else: + # else: ## in_j = j - #if buddy != "NONE": + # if buddy != "NONE": self.grid_loc = None if "useGrid" in self.settings.data: if self.settings.data["useGrid"]: - if 'grid' in self.settings.data["Parameters"][key]["data"]: + if 'grid' in self.settings.data['Parameters'][key]['data']: self.grid_loc = self.settings.data[ - "Parameters"][key]["data"]["grid"] - + 'Parameters'][key]['data']["grid"] if draw_widget(buddy): self.input_wgt(buddy=buddy, label=label, key=key, value=val, irow=j, wgt_grid=self.input_wgt_grid) - ##if j == 4: + # if j == 4: ## in_j = 1 - ##self.input_wgt_grid.setHorizontalSpacing(10) + # self.input_wgt_grid.setHorizontalSpacing(10) self.operator_parameters_group.layout().addLayout(self.input_wgt_grid) - self.operator_parameters_group.setMinimumHeight(INPUT_PARAMETERS_HEIGHT) + self.operator_parameters_group.setMinimumHeight( + INPUT_PARAMETERS_HEIGHT) - lo = QGridLayout() lo.setContentsMargins(9, 19, 9, 9) lo.addWidget(self.operator_parameters_group, 0, 0, 4, 1, alignment=Qt.AlignTop) - #if random.randint(1, 10) > 9: + # if random.randint(1, 10) > 9: # lo.addWidget(self.create_analysis_wgt(), 0, 1) - #else: + # else: if self.has_optics: lo.addWidget(self.optics_groupbox(), 0, 1) row_count = 1 else: row_count = 0 - if self.has_procedure: + if self.has_procedure and self.destination_procedure != 'Expert': if 'V' in self.orientation_procedure.upper(): lo.addWidget( self.analysis_procedure_group(), row_count, 1, 1, 1) else: lo.addWidget( self.analysis_procedure_group(), lo.rowCount(), 0, 1, 1) - - #Centers input parameters group box - lo.setAlignment(Qt.AlignmentFlag(Qt.AlignHCenter|Qt.AlignTop)) + + # Centers input parameters group box + lo.setAlignment(Qt.AlignmentFlag(Qt.AlignHCenter | Qt.AlignTop)) lo.setHorizontalSpacing(20) lo.setVerticalSpacing(10) + self.operator_wgt.setLayout(lo) - - - #expert + + # expert self.expert_parameters_group = self.expert_parameters_groupbox() for (key, val), label in zip(self.all_expert_parameters.items(), @@ -2917,31 +2867,30 @@ class GUIFrame(QWidget): self.grid_loc = None if "useGrid" in self.settings.data: if self.settings.data["useGrid"]: - if 'grid' in self.settings.data["Expert"][key]["data"]: + if 'grid' in self.settings.data['Expert'][key]['data']: self.grid_loc = self.settings.data[ - "Expert"][key]["data"]["grid"] + 'Expert'][key]['data']["grid"] buddy = self.settings.data[ - "Expert"][key]["data"]["widget"].upper() + 'Expert'][key]['data']['widget'].upper() j = self.expert_wgt_grid.rowCount() if buddy != "NONE": self.input_wgt(buddy=buddy, label=label, key=key, value=val, irow=j, wgt_grid=self.expert_wgt_grid) - #Add expert parameters to input_parameters + # Add expert parameters to input_parameters self.input_parameters.update(self.expert_parameters) - #Need to emit radio button here as input_parameters is - #overwritten by sel.expoert_parameters - #which give a list [Gasusian and FWMH] + # Need to emit radio button here as input_parameters is + # overwritten by sel.expoert_parameters + # which give a list [Gasusian and FWMH] if self.radiobutton: - self.radiobutton[0].toggled.emit(True) + self.radiobutton[0].toggled.emit(True) if self.expert_wgt_grid: self.expert_parameters_group.layout().addLayout( self.expert_wgt_grid) - if "pipeline" in self.parent.input_parameters.keys(): self.expert_parameters_group.layout().addWidget( self.image_parameters_group()) @@ -2981,17 +2930,15 @@ class GUIFrame(QWidget): if "debug" in self.parent.input_parameters.keys(): hbox2.addWidget(self.checkbox_debug(hline="None")) - if "simulation" in self.parent.input_parameters.keys(): hbox2.addWidget(self.checkbox_simulation(hline="None")) self.expert_parameters_group.layout().addLayout(hbox2) - self.expert_parameters_group.layout().addLayout( self.input_wgt_logging(self.expert_wgt_grid.rowCount(), - self.expert_wgt_grid)) + self.expert_wgt_grid)) self.expert_parameters_group.layout().addWidget(QHLine()) @@ -3001,20 +2948,34 @@ class GUIFrame(QWidget): lo.setContentsMargins(9, 19, 9, 9) lo.addWidget(self.expert_parameters_group, 0, 0, 1, 1, alignment=Qt.AlignTop) - lo.setAlignment(Qt.AlignmentFlag(Qt.AlignHCenter|Qt.AlignTop)) + + if self.has_procedure and self.destination_procedure == 'Expert': + if 'V' in self.orientation_procedure.upper(): + lo.addWidget( + self.analysis_procedure_group(), row_count, 1, 1, 1, + alignment=Qt.AlignTop) + else: + lo.addWidget( + self.analysis_procedure_group(), lo.rowCount(), 0, 1, 1, + alignment=Qt.AlignTop) + + # Centers input parameters group box + lo.setAlignment(Qt.AlignmentFlag(Qt.AlignHCenter | Qt.AlignTop)) lo.setHorizontalSpacing(20) + lo.setVerticalSpacing(10) + self.expert_wgt.setLayout(lo) - #test - def radio_buttons(self, key="", options: list = [], start_idx=0): + # test + def radio_buttons(self, key="", options: list = [], start_idx=0): widget = QWidget() layout = QGridLayout() layout.setContentsMargins(5, 0, 5, 0) widget.setMaximumWidth(220) - #self.setLayout(layout) + # self.setLayout(layout) target_list = options - color_list = ["#894961", "teal", "darkblue"] + color_list = ['#894961', 'teal', 'darkblue'] self.radiobutton = [None] * len(options) for i, title in enumerate(options): @@ -3022,18 +2983,18 @@ class GUIFrame(QWidget): width_list = [70, 70, 70] - if key in self.settings.data["Expert"].keys(): - top_key = "Expert" - elif key in self.settings.data["Parameters"].keys(): - top_key = "Parameters" + if key in self.settings.data['Expert'].keys(): + top_key = 'Expert' + elif key in self.settings.data['Parameters'].keys(): + top_key = 'Parameters' _width = 1 - _full_width = _width * len(options) + 1 + _full_width = _width * len(options) + 1 layout.addWidget(QHLine(), 0, 0, 1, _full_width) layout.addWidget(QLabel( - self.settings.data[top_key][key]['data']['text']), 1, 0, 1, 1, - Qt.AlignCenter) + self.settings.data[top_key][key]['data']['text']), 1, 0, 1, 1, + Qt.AlignCenter) for i, (radio, target, color, width) in enumerate( zip(self.radiobutton, target_list, color_list, width_list)): @@ -3041,9 +3002,14 @@ class GUIFrame(QWidget): radio.setFont(self.font_pts10) radio.setStyleSheet("color : {0};".format(color)) radio.target = target - - layout.addWidget(radio, 1, _width*i+1, 1, _width, Qt.AlignCenter) - + + layout.addWidget( + radio, + 1, + _width * i + 1, + 1, + _width, + Qt.AlignCenter) layout.addWidget(QHLine(), 2, 0, 1, layout.columnCount()) @@ -3051,7 +3017,6 @@ class GUIFrame(QWidget): return widget - def create_table_wgt(self, pv_list: list): return CAQTableWidget(self, pv_list=pv_list, init_column=True, notify_freq_hz=5, notify_unison=True) @@ -3064,19 +3029,19 @@ class GUIFrame(QWidget): #print("PM", self.line_sender_dict['profileMonitor'].currentText()) #key = self.line_sender_dict['profileMonitor'].currentText() - #cannot enumerate self.branches!! + # cannot enumerate self.branches!! for i, table in enumerate(self.table_wgt): - branch_key = self.branches[i]['key'] #branch['key'] + branch_key = self.branches[i]['key'] # branch['key'] key = self.line_sender_dict[branch_key].currentText() #print(branch_key, key, i, tab_idx) - #if key in self.branches[i]['lastLine'][key]: + # if key in self.branches[i]['lastLine'][key]: # print("i/idx", i, tab_idx, # self.branches[i]['lastLine'][key]) - #else: + # else: # self.branches[i]['lastLine'][key] = [' ',' '] - #print(self.branches[i]['tagged']) + # print(self.branches[i]['tagged']) if i == tab_idx: if key in self.branches[i]['tagged']: table.paint_rows(reset=True, last_row=[' ', ' ']) @@ -3095,14 +3060,14 @@ class GUIFrame(QWidget): self.table_layout = QGridLayout() self.table_layout.setAlignment( - Qt.AlignmentFlag(Qt.AlignHCenter|Qt.AlignTop)) + Qt.AlignmentFlag(Qt.AlignHCenter | Qt.AlignTop)) self.table_tab_wgt = QTabWidget() self.table_tab_wgt.setFixedWidth(600) self.table_tab_wgt.tabBar().setShape(QTabBar.TriangularNorth) - #self.table_tab_wgt.tabBar().setDrawBase(False) + # self.table_tab_wgt.tabBar().setDrawBase(False) - #Initialization has to loop + # Initialization has to loop self.table_wgt = [None] * len(pv_dict) for i, tab_text in enumerate(pv_dict.keys()): @@ -3114,7 +3079,6 @@ class GUIFrame(QWidget): self.table_tab_wgt.addTab(self.table_wgt[i], tab_text) color = self.branches[i]['tabTextColor'] self.table_tab_wgt.tabBar().setTabTextColor(i, QColor(color)) - self.table_tab_wgt.currentChanged.connect(on_table_tab_changed) self.table_layout.addWidget(self.table_tab_wgt, 0, 0) @@ -3123,6 +3087,4 @@ class GUIFrame(QWidget): self.table_tab_wgt.currentChanged.emit(0) - return self.table_layout #tab_wgt - - + return self.table_layout # tab_wgt