From a332aecd879f315a2cb560fcaac3accbc59b8ec7 Mon Sep 17 00:00:00 2001 From: chrin Date: Thu, 6 Oct 2022 08:26:50 +0200 Subject: [PATCH] v1.4.0 --- base.py | 84 +++++++++++++++++------- guiframe.py | 185 +++++++++++++++++++++++++++++++++------------------- sendelog.py | 10 +-- 3 files changed, 186 insertions(+), 93 deletions(-) diff --git a/base.py b/base.py index 7f30406..b3cfc12 100644 --- a/base.py +++ b/base.py @@ -101,32 +101,53 @@ class BaseWindow(QMainWindow): time_in_seconds=self.time_in_seconds, reanalysis_time_in_seconds=self.reanalysis_time) - print("date_str", date_str, flush=True) + #print("date_str", date_str, flush=True) + write_message_fired = False for i, (nfig, name) in enumerate( zip(self.settings.data["GUI"]["resultsSeq"], self.settings.data["GUI"]["subResultsTabTitle"])): canvas = 'Canvas {0}'.format(i+1) name_base = name.replace(' ', '_').lower() - for idx in range(0, nfig): + if self.all_data['Figure data'][canvas] is not None: + nfig_canvas = len(self.all_data['Figure data'][canvas]) + nfig_canvas = min(nfig_canvas, nfig) + else: + nfig_canvas = nfig + + + for idx in range(0, nfig_canvas): if self.all_data['Figure data'][canvas] is not None: name = name_base + "_{0}".format( idx) if idx > 0 else name_base save_dest = (folder_name + date_str + '_' + name + '.png') - print("idx", i, save_dest, flush=True) + if not os.path.exists(save_dest): if self.all_data['Figure data'][canvas][ idx] is not None: - self.all_data['Figure data'][canvas][ - idx].savefig(save_dest) + _dirname = os.path.dirname(save_dest) + if os.access(_dirname, os.W_OK): + self.all_data['Figure data'][canvas][ + idx].savefig(save_dest) + elif not write_message_fired: + _mess = ("Do not have write permission " + + "for directory {0} from this " + + "host {1}. Images not saved and " + + "cannot be sent to elog").format( + _dirname, os.uname()[1]) + self.parent.trigger_log_message.emit( + MsgSeverity.WARN.name, _pymodule, + _line(), _mess, {}) + write_message_fired = True + attach_files.append(save_dest) if attach_files: self.parent.attach_files = attach_files - print("All files attached") + print("All files attached", flush=True) else: print("No files to attach", flush=True) time.sleep(0.2) #avoid race condition @@ -276,12 +297,15 @@ class BaseWindow(QMainWindow): def run(self): """Run thread """ + + all_dict = self.analysis_procedure.measure_and_analyze( self.input_parameters) # Emit results - if all_dict is not None: + if all_dict: self.trigger_thread_event.emit(all_dict) + mess = "Analysis completed" self.parent.trigger_log_message.emit( MsgSeverity.INFO.name, _pymodule, _line(), mess, {}) @@ -313,6 +337,9 @@ class BaseWindow(QMainWindow): print("User: {0} Host: {1}".format(os.getlogin(), os.uname()[1])) print("=============================================", flush=True) + self.settings = ReadJSON(self.appname) + + self.cafe = PyCafe.CyCafe() self.cyca = PyCafe.CyCa() self.cafe_exception = PyCafe.CafeException @@ -332,7 +359,7 @@ class BaseWindow(QMainWindow): self.hdf_dialog = None self.daq_analysis_completed = False - self.hdf_save_completed = False + self.setObjectName("MainWindow") self.setWindowTitle(self.appname) @@ -343,8 +370,7 @@ class BaseWindow(QMainWindow): self.menu = self.menuBar() - self.settings = ReadJSON(self.appname) - + ''' try: dirname = self.settings.data["stdout"]["destination"] @@ -382,13 +408,16 @@ class BaseWindow(QMainWindow): self.autopost_epics = self.settings.data["menuFlags"]["hasEpics"] except KeyError as error: print("KeyError in base.py, init:", error) - self.autopost_epics = True + self.autopost_epics = False try: self.autopost_hdf = self.settings.data["menuFlags"]["hasH5"] except KeyError as error: print("KeyError in base.py, init:", error) - self.autopost_hdf = True + self.autopost_hdf = False + + self.hdf_save_completed = False if self.autopost_hdf else True + self.all_input_parameters = {} #gui self.all_input_labels = {} #gui @@ -473,8 +502,9 @@ class BaseWindow(QMainWindow): self.gui_frame = GUIFrame(self, has_optics=self.has_optics) self.show_log_message = self.gui_frame.show_log_message - self.hdf_dock_widget = QNoDockWidget(" HDF5", self) - self.init_hdf_analysis_wgt() + if self.autopost_hdf: + self.hdf_dock_widget = QNoDockWidget(" HDF5", self) + self.init_hdf_analysis_wgt() self.mainwindow_layout.addWidget(self.gui_frame.central_tab_widget) self.mainwindow.setLayout(self.mainwindow_layout) @@ -1613,7 +1643,7 @@ class BaseWindow(QMainWindow): @Slot() def start_analysis_thread(self): - + if not self.analysis_procedure: mess = "Analysis thread not configured for this application" self.show_log_message(MsgSeverity.ERROR, _pymodule, _line(), mess) @@ -1636,17 +1666,17 @@ class BaseWindow(QMainWindow): if not self.verify_analysis_preconditions(): return - + + self.analysis_thread = self.AnalysisThread( self, self.analysis_procedure, self.input_parameters) + self.analysis_thread.trigger_thread_event.connect( self.receive_analysis_results) self.analysis_thread.started.connect(self.analysis_thread_started) self.analysis_thread.finished.connect(self.analysis_thread_finished) - #getMachineDatafor hdf - self.analysis_thread.start() QApplication.processEvents() @@ -1686,9 +1716,10 @@ class BaseWindow(QMainWindow): @Slot(dict) def receive_analysis_results(self, all_dict): - #print("receive analysis results", all_dict) + print("receive analysis results===>") self.all_data = all_dict self.gui_frame.canvas_update(all_dict['Figure data']) + print("here") self.gui_frame.central_tab_widget.setCurrentIndex(1) self.gui_frame.results_tab_wgt.setCurrentIndex(0) @@ -1696,7 +1727,7 @@ class BaseWindow(QMainWindow): def receive_abort_analysis(self): """Instantiate action on abort """ - print("Aborting") + print("Aborting", flush=True) if self.analysis_procedure.abort: return self.gui_frame.in_abort_procedure() @@ -1719,6 +1750,12 @@ class BaseWindow(QMainWindow): message="Measurement in progress..."): '''Receives update of message''' self.progressbar.setVisible(True) + try: + if self.input_parameters["simulation"] : + self.progressbar_color = self.progressbar_simulation + except KeyError: + pass + if value == PROGRESS_BAR_THREAD_INIT: self.progressbar.setVisible(False) self.progressbar.setFormat("") @@ -1738,6 +1775,8 @@ class BaseWindow(QMainWindow): prog_val = re.findall(r'\d+', message) if prog_val: self.progressbar.setValue(int(prog_val[0])) + else: + self.progressbar.setValue(int(10)) mess = "Aborting measurement procedure" self.show_log_message( MsgSeverity.WARN.name, _pymodule, _line(), mess) @@ -1764,7 +1803,8 @@ class BaseWindow(QMainWindow): self.progressbar.setValue(value) self.progressbar.setObjectName(self.progressbar_color) self.daq_analysis_completed = True - self.hdf_save_completed = False + if self.autopost_hdf: + self.hdf_save_completed = False QTimer.singleShot(2000, lambda: self.progressbar.setVisible(False)) else: self.progressbar.setFormat(message) @@ -1774,7 +1814,7 @@ class BaseWindow(QMainWindow): self.progressbar.style().polish(self.progressbar) QApplication.processEvents() time.sleep(0.0001) - + def initialize_application(self, appname=_appname, delay=None, facility=Facility.SwissFEL): diff --git a/guiframe.py b/guiframe.py index e83245e..b91c83b 100644 --- a/guiframe.py +++ b/guiframe.py @@ -24,8 +24,8 @@ from pyqtacc.bdbase.enumkind import Facility, MsgSeverity, UserMode _pymodule = os.path.basename(__file__) _appversion = "1.0.0" -INPUT_PARAMETERS_HEIGHT = 600 -EXPERT_PARAMETERS_HEIGHT = 600 +INPUT_PARAMETERS_HEIGHT = 200 +EXPERT_PARAMETERS_HEIGHT = 200 def _line(): @@ -81,7 +81,7 @@ class GUIFrame(QWidget): self.phase_stacked_widget = None self.table_tab_wgt = None - + self.radiobutton = None self.multiple_figure_dict = None self.line_sender_dict = {} @@ -104,7 +104,7 @@ class GUIFrame(QWidget): self.measurement_layout.setAlignment(Qt.AlignLeft | Qt.AlignTop) self.measurement_layout.setSpacing(50) self.measurement_tab_wgt = QTabWidget(self.measurement_wgt) - self.measurement_tab_wgt.setFixedWidth(480) + self.measurement_tab_wgt.setMinimumWidth(480) self.operator_wgt = QWidget(self.measurement_tab_wgt) self.expert_wgt = QWidget(self.measurement_tab_wgt) @@ -113,20 +113,6 @@ class GUIFrame(QWidget): self.results_layout = QHBoxLayout(self.results_wgt) self.results_tab_wgt = QTabWidget(self.results_wgt) - self.results_tab_wgt_titles = self.settings.data[ - "GUI"]["subResultsTabTitle"] - - self.sub_results_wgt = [None] * len(self.results_tab_wgt_titles) - self.sub_results_layout = [None] * len(self.results_tab_wgt_titles) - - for i in range(0, len(self.results_tab_wgt_titles)): - self.sub_results_wgt[i] = QWidget(self.results_tab_wgt) - - self.canvas = [None] * len(self.results_tab_wgt_titles) - self.nav = [None] * len(self.results_tab_wgt_titles) - - self.arrow_button_widget = [None] * len(self.results_tab_wgt_titles) - self.canvas_current_idx = [0] * len(self.results_tab_wgt_titles) self.canvas_fig_dict = {} self.left_arrow_dict = {} @@ -138,15 +124,32 @@ class GUIFrame(QWidget): self.start_wgt_text = "Start" self.save_all_wgt = QWidget() - self.slice_orientation = "vertical" #horizontal/vertical for SATMA02 + if "GUI" in self.settings.data: + self.results_tab_wgt_titles = self.settings.data[ + "GUI"]["subResultsTabTitle"] + + self.sub_results_wgt = [None] * len(self.results_tab_wgt_titles) + self.sub_results_layout = [None] * len(self.results_tab_wgt_titles) + + for i in range(0, len(self.results_tab_wgt_titles)): + self.sub_results_wgt[i] = QWidget(self.results_tab_wgt) + + self.canvas = [None] * len(self.results_tab_wgt_titles) + self.nav = [None] * len(self.results_tab_wgt_titles) + + self.arrow_button_widget = [None] * len(self.results_tab_wgt_titles) + self.canvas_current_idx = [0] * len(self.results_tab_wgt_titles) + self.init_results_tab_wgt() + + + self.slice_orientation = "vertical" #horizontal/vertical for SATMA02 self.init_measurement_tab_wgt() - self.init_results_tab_wgt() - + self.log_wgt = QMessageWidget() self.log_layout = QVBoxLayout(self.log_wgt) - self.show_log_message(MsgSeverity.INFO, _pymodule, _line(), - "Application started") + #self.show_log_message(MsgSeverity.INFO, _pymodule, _line(), + # "Application started") self.input_wgt_grid = QGridLayout() self.input_wgt_grid.setHorizontalSpacing(0) @@ -164,8 +167,9 @@ class GUIFrame(QWidget): """ self.central_tab_widget.setFont(self.font_gui) self.central_tab_widget.addTab(self.measurement_wgt, "Measurement") - self.central_tab_widget.addTab( - self.results_wgt, self.settings.data["GUI"]["resultsTabTitle"]) + if "GUI" in self.settings.data: + self.central_tab_widget.addTab( + self.results_wgt, self.settings.data["GUI"]["resultsTabTitle"]) self.central_tab_widget.addTab(self.log_wgt, "Log") def init_measurement_tab_wgt(self): @@ -240,7 +244,7 @@ class GUIFrame(QWidget): hbox.setSpacing(5) hbox.setAlignment(Qt.AlignTop | Qt.AlignHCenter) group_box.setMaximumWidth(208) - group_box.setMaximumHeight(220) + group_box.setMinimumHeight(196) group_box.setFont(self.font_gui) group_box.setAlignment(Qt.AlignTop | Qt.AlignHCenter) group_box.setLayout(hbox) @@ -565,6 +569,7 @@ class GUIFrame(QWidget): self.abort_wgt.setEnabled(False) self.start_wgt.setEnabled(False) self.start_wgt.setText("Aborting...") + def reset_procedure(self): self.abort_wgt.setVisible(False) @@ -754,6 +759,8 @@ class GUIFrame(QWidget): checkbox.stateChanged.connect(on_change) checked_value = Qt.Unchecked + 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(): @@ -925,18 +932,23 @@ class GUIFrame(QWidget): def canvas_update(self, fig_data, idx=0): #place figures in a list - self.parent.clear_screenshot() + + + self.parent.clear_screenshot() self.multiple_figure_dict = fig_data for i, key in enumerate(self.multiple_figure_dict.keys()): self.canvas_fig_dict[i] = key + 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) @@ -945,10 +957,13 @@ class GUIFrame(QWidget): nav.deleteLater() 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]) @@ -959,10 +974,10 @@ 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 @@ -986,13 +1001,14 @@ class GUIFrame(QWidget): 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(220) + stacked_widget.setMaximumHeight(320) self.stacked_wgt_dict[stacked_widget] = stack_list return stacked_widget @@ -1043,8 +1059,11 @@ class GUIFrame(QWidget): radiobutton_flag = [monitor, read, manual] 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) @@ -1057,10 +1076,9 @@ class GUIFrame(QWidget): #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.current_stacked_wgt_dict[k2] = pv_local #self.sender() #print("Current STACK FOUND") - - + self.radio_stack_dict[self.sender()] = value if not value_str: @@ -1098,6 +1116,7 @@ class GUIFrame(QWidget): if flag: grid.addWidget(radio, irow, 0) + if monitor: ql = QLabel(radiobutton_title[0]) ql.setFont(self.font_pts10) @@ -1112,16 +1131,18 @@ class GUIFrame(QWidget): ql.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) grid.addWidget(ql, 2, 1) - def mon_cb(handle, pvname, pvdata): - monitor_pv.py_monitor_callback(handle, pvname, pvdata) - if pvname in self.current_stacked_wgt_dict.values(): + 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(): # self.input_parameters[key] = pvdata.value[0] - if monitor: monitor_pv = CAQLabel(self, pv_name=pv, monitor_callback=mon_cb, show_units=True) + monitor_pv.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) monitor_pv.setFont(self.font_pts10) monitor_pv.setFixedHeight(self.widget_height) @@ -1193,13 +1214,14 @@ class GUIFrame(QWidget): ql.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) grid.addWidget(ql, 2, 3) - grid.setContentsMargins(9, 15, 9, 0) + grid.setContentsMargins(5, 10, 5, 0) + #grid.setContentsMargins(9, 15, 9, 0) grid.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) grid.setVerticalSpacing(2) grid.setHorizontalSpacing(4) group_box.setContentsMargins(0, 0, 0, 0) group_box.setMaximumWidth(280) - group_box.setMaximumHeight(260) + group_box.setMaximumHeight(320) group_box.setFont(self.font_pts10) group_box.setAlignment(Qt.AlignTop | Qt.AlignHCenter) group_box.setLayout(grid) @@ -1265,11 +1287,19 @@ class GUIFrame(QWidget): return line def input_wgt_qradiobutton(self, key, value, irow, wgt_grid): - def on_radiobutton_change(): #new_value): + def on_radiobutton_change(new_value): radio_button = self.sender() - self.parent.input_parameters[key] = radio_button.target - if 'forwardLink' in self.settings.data['Parameters'][key]['data']: - link = self.settings.data['Parameters'][key]['data'][ + 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 'forwardLink' in self.settings.data[top_key][key]['data']: + link = self.settings.data[top_key][key]['data'][ 'forwardLink'][0] for item in self.settings.data[link][radio_button.target]: @@ -1277,26 +1307,28 @@ class GUIFrame(QWidget): item] if item in self.line_sender_dict: - if self.settings.data['Parameters'][item]['data'][ + if self.settings.data[top_key][item]['data'][ 'widget'] in 'QComboBox': self.line_sender_dict[item].clear() self.line_sender_dict[item].addItems(value_list) self.line_sender_dict[item].setCurrentIndex(0) self.line_sender_dict[item].currentTextChanged.emit( value_list[0]) - elif self.settings.data['Parameters'][item]['data'][ + elif self.settings.data[top_key][item]['data'][ 'widget'] in 'QLineEdit': self.line_sender_dict[item].setText(str(value_list)) - line = self.radio_buttons(value) + line = self.radio_buttons(key=key, options=value) rblist = line.findChildren(QRadioButton) for rb in rblist: rb.toggled.connect(on_radiobutton_change) - rblist[0].setChecked(True) - rblist[0].toggled.emit(True) - wgt_grid.addWidget(line, irow, 0, 1, 4) + wgt_grid.addWidget(line, irow, 0, 1, 4, Qt.AlignLeft) + + rblist[0].setChecked(True) + rblist[0].toggled.emit(True) + return line @@ -1559,11 +1591,12 @@ class GUIFrame(QWidget): irow=j, wgt_grid=self.input_wgt_grid) self.operator_parameters_group.layout().addLayout(self.input_wgt_grid) - self.operator_parameters_group.setFixedHeight(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) + lo.addWidget(self.operator_parameters_group, 0, 0, 4, 1, alignment=Qt.AlignTop) #if random.randint(1, 10) > 9: # lo.addWidget(self.create_analysis_wgt(), 0, 1) #else: @@ -1574,6 +1607,7 @@ class GUIFrame(QWidget): row_count = 0 lo.addWidget(self.analysis_procedure_group(), row_count, 1) + #Centers input parameters group box lo.setAlignment(Qt.AlignHCenter | Qt.AlignTop) lo.setHorizontalSpacing(20) @@ -1596,6 +1630,11 @@ class GUIFrame(QWidget): #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] + if self.radiobutton: + self.radiobutton[0].toggled.emit(True) + if self.expert_wgt_grid: self.expert_parameters_group.layout().addLayout( self.expert_wgt_grid) @@ -1644,21 +1683,23 @@ class GUIFrame(QWidget): self.expert_parameters_group.layout().addWidget(QHLine()) - self.expert_parameters_group.setFixedHeight(EXPERT_PARAMETERS_HEIGHT) + self.expert_parameters_group.setMinimumHeight(EXPERT_PARAMETERS_HEIGHT) lo = QGridLayout() lo.setContentsMargins(9, 19, 9, 9) - lo.addWidget(self.expert_parameters_group, 0, 0, 2, 1) + lo.addWidget(self.expert_parameters_group, 0, 0, 1, 1, alignment=Qt.AlignTop) lo.setAlignment(Qt.AlignHCenter | Qt.AlignTop) lo.setHorizontalSpacing(20) self.expert_wgt.setLayout(lo) #test - def radio_buttons(self, options: list = [], start_idx=0): + def radio_buttons(self, key="", options: list = [], start_idx=0): widget = QWidget() layout = QGridLayout() - layout.setContentsMargins(0, 0, 0, 0) - self.setLayout(layout) + layout.setContentsMargins(5, 0, 5, 0) + widget.setFixedWidth(220) + #self.setLayout(layout) + target_list = options color_list = ["#894961", "teal", "darkblue"] @@ -1669,11 +1710,18 @@ class GUIFrame(QWidget): width_list = [70, 70, 70] - layout.addWidget(QHLine(), 0, 0, 1, 3) - layout.addWidget(QLabel("RF Tranverse Deflector"), 1, 0, 1, 3, - Qt.AlignCenter) + if key in self.settings.data["Expert"].keys(): + top_key = "Expert" + elif key in self.settings.data["Parameters"].keys(): + top_key = "Parameters" - _fix_width = False + _width = 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) for i, (radio, target, color, width) in enumerate( zip(self.radiobutton, target_list, color_list, width_list)): @@ -1681,14 +1729,17 @@ class GUIFrame(QWidget): radio.setFont(self.font_pts10) radio.setStyleSheet("color : {0};".format(color)) radio.target = target - layout.addWidget(radio, 2, i) - if _fix_width: - radio.setFixedWidth(width) + + layout.addWidget(radio, 1, _width*i+1, 1, _width, Qt.AlignCenter) + + #_qf = QFrame() + #_qf.setFixedWidth(10) + #layout.addWidget(_qf, 1, layout.columnCount()) - self.radiobutton[start_idx].setChecked(True) - self.radiobutton[start_idx].toggled.emit(True) + #self.radiobutton[start_idx].setChecked(True) + #self.radiobutton[start_idx].toggled.emit(True) - layout.addWidget(QHLine(), 3, 0, 1, 3) + layout.addWidget(QHLine(), 2, 0, 1, layout.columnCount()) widget.setLayout(layout) diff --git a/sendelog.py b/sendelog.py index 510bc20..c0a15cb 100644 --- a/sendelog.py +++ b/sendelog.py @@ -34,6 +34,7 @@ class QSendToELOG(QDialog): attachFile=None, destination_folder=None): #super(QSendToELOG, self).__init__(parent) super().__init__() + self.files_text = '' self.fflag = False self.parent = parent @@ -43,7 +44,7 @@ class QSendToELOG(QDialog): self.destination = destination_folder self.window_title = self.parent.appname + ": " + _appname self.pymodule = _pymodule - + self.setWindowTitle(self.window_title) elog_books = list(self.parent.settings.data["ElogBooks"]) @@ -51,6 +52,7 @@ class QSendToELOG(QDialog): self.elog_items.addItems(elog_books) self.elog_items.currentIndexChanged.connect(self.on_elog_change) idx = 0 + if logbook is not None: try: idx = elog_books.index(logbook) @@ -144,7 +146,7 @@ class QSendToELOG(QDialog): self.files = [] self.attributes = {} - + self.layout = QVBoxLayout(self) self.layout.addLayout(logbook) self.layout.addLayout(self.applicationbox) @@ -187,7 +189,7 @@ class QSendToELOG(QDialog): self.fflag = True filebox.addWidget(self.filesE) - + openCloseVBox = QVBoxLayout() self.openBtn = QPushButton('Add') self.openBtn.setAutoDefault(False) @@ -216,7 +218,7 @@ class QSendToELOG(QDialog): self.messagelbl.setStyleSheet("QLabel { color : red; }") self.layout.addWidget(self.messagelbl) self.layout.addLayout(btnLayout) - + self.setMinimumWidth(440) self.exec()