def get_sample_position(self): sample_position_widget_dict = { 'push_get_sample_position': { 'x_widget': 'spinBox_sample_x', 'y_widget': 'spinBox_sample_y' }, 'push_get_sample_position_map_start': { 'x_widget': 'spinBox_sample_x_map_start', 'y_widget': 'spinBox_sample_y_map_start' }, 'push_get_sample_position_map_end': { 'x_widget': 'spinBox_sample_x_map_end', 'y_widget': 'spinBox_sample_y_map_end' }, } sender_object = QObject().sender().objectName() x_value = self.sample_stage.x.position x_widget = getattr( self, sample_position_widget_dict[sender_object]['x_widget']) x_widget.setValue(x_value) y_value = self.sample_stage.y.position y_widget = getattr( self, sample_position_widget_dict[sender_object]['y_widget']) y_widget.setValue(y_value)
def fix_rois(self): sender = QObject() sender_object = sender.sender().objectName() indx_ch = sender_object[11] if sender.sender().isChecked(): for jj in range(2): # repeat to make sure no values are forced for indx_roi in range(self.num_rois): for indx_lo_hi in range(2): spinbox_name_ch1 = self.spinbox_roi.format( 1, indx_roi + 1, self.lo_hi[indx_lo_hi]) spinbox_object_ch1 = getattr(self, spinbox_name_ch1) value = spinbox_object_ch1.value() spinbox_name = self.spinbox_roi.format( indx_ch, indx_roi + 1, self.lo_hi[indx_lo_hi]) spinbox_object = getattr(self, spinbox_name) spinbox_object.setValue(value) spinbox_object.setEnabled(False) else: for indx_roi in range(self.num_rois): for indx_lo_hi in range(2): spinbox_name = self.spinbox_roi.format( indx_ch, indx_roi + 1, self.lo_hi[indx_lo_hi]) spinbox_object = getattr(self, spinbox_name) spinbox_object.setEnabled(True)
def truncate(self): sender = QObject() sender_object = sender.sender().objectName() print(sender_object) selection = self.listView_xasproject.selectedIndexes() if selection != []: for indx, obj in enumerate(selection): print(indx) ds = self.xasproject._datasets[selection[indx].row()] print(ds.name) energy = ds.energy mu = ds.mu indx_energy_to_truncate_at = ( np.abs(energy - float(self.lineEdit_truncate_at.text()))).argmin() if sender_object == 'pushButton_truncate_below': ds.energy = energy[indx_energy_to_truncate_at:] ds.mu = mu[indx_energy_to_truncate_at:] elif sender_object == 'pushButton_truncate_above': ds.energy = energy[0:indx_energy_to_truncate_at] ds.mu = mu[0:indx_energy_to_truncate_at:] ds.update_larch() self.xasproject._datasets[selection[indx].row()] = ds
def set_roi_value(self): print('Setting Roi') proceed = False sender = QObject() sender_object = sender.sender().objectName() indx_ch = sender_object[10] indx_roi = sender_object[15] lo_hi = sender_object[17:] signal = self.get_roi_signal(indx_ch, indx_roi, self.lo_hi.index(lo_hi)) value = sender.sender().value() #validate limits if lo_hi == 'lo': counter_signal = self.get_roi_signal(indx_ch, indx_roi, self.lo_hi.index('hi')) counter_value = counter_signal.get() * 10 if value < counter_value: proceed = True elif lo_hi == 'hi': counter_signal = self.get_roi_signal(indx_ch, indx_roi, self.lo_hi.index('lo')) counter_value = counter_signal.get() * 10 if value > counter_value: proceed = True if proceed: signal.put(int(value / 10)) self.roi_values[int(indx_ch) - 1, int(indx_roi) - 1, self.lo_hi.index(lo_hi)] = value else: sender.sender().setValue(counter_value) self.update_roi_plot()
def set_mfc_cart_flow(self): sender = QObject() sender_object = sender.sender() sender_name = sender_object.objectName() value = sender_object.value() indx_mfc = int(re.findall(r'\d+', sender_name)[0]) self.mfcs[indx_mfc - 1].sp.set(value)
def set_flow_rates(self): sender = QObject() sender_object = sender.sender() sender_name = sender_object.objectName() # print(sender_name) indx_ch, indx_mnf = re.findall(r'\d+', sender_name) value = sender_object.value() self.ghs['channels'][indx_ch][f'mfc{indx_mnf}_sp'].set(value)
def toggle_channels(self): sender = QObject() sender_object = sender.sender() sender_name = sender_object.objectName() indx_ch, indx_mnf = re.findall(r'\d+', sender_name) if sender_object.isChecked(): self.ghs['channels'][indx_ch][f'mnf{indx_mnf}_vlv_upstream'].set(1) self.ghs['channels'][indx_ch][f'mnf{indx_mnf}_vlv_dnstream'].set(1) else: self.ghs['channels'][indx_ch][f'mnf{indx_mnf}_vlv_upstream'].set(0) self.ghs['channels'][indx_ch][f'mnf{indx_mnf}_vlv_dnstream'].set(0)
def push_param(self): self.norm_param_list = [ 'e0', 'pre1', 'pre2', 'norm1', 'norm2', ] self.bkg_param_list = [ 'kmin', 'kmax', 'clamp_lo', 'clamp_hi', 'rbkg', 'kweight' ] self.ft_param_list = [ 'kmin_ft', 'kmax_ft' ] selection = self.list_project.selectedIndexes() if selection != []: sender = QObject() sender_object = sender.sender().objectName() index = selection[0].row() ds_master = self.parent.project[index] if sender_object == 'pushButton_push_norm_param_to_selected': for indx, obj in enumerate(selection): ds = self.parent.project[selection[indx].row()] for param in self.norm_param_list: setattr(ds, param, getattr(ds_master, param)) if sender_object == 'pushButton_push_norm_param_to_all': for indx, obj in enumerate(self.parent.project): for param in self.norm_param_list: setattr(self.parent.project[indx], param, getattr(ds_master, param)) if sender_object == 'pushButton_push_bkg_param_to_selected': for indx, obj in enumerate(selection): ds = self.parent.project[selection[indx].row()] for param in self.bkg_param_list: setattr(ds, param, getattr(ds_master, param)) if sender_object == 'pushButton_push_bkg_param_to_all': for indx, obj in enumerate(self.parent.project): for param in self.bkg_param_list: setattr(self.parent.project[indx], param, getattr(ds_master, param)) if sender_object == 'pushButton_push_ft_param_to_selected': for indx, obj in enumerate(selection): ds = self.parent.project[selection[indx].row()] for param in self.ft_param_list: setattr(ds, param, getattr(ds_master, param)) if sender_object == 'pushButton_push_ft_param_to_all': for indx, obj in enumerate(self.parent.project): for param in self.ft_param_list: setattr(self.parent.project[indx], param, getattr(ds_master, param))
def set_roi_value(self): sender = QObject() sender_object = sender.sender().objectName() indx_ch = sender_object[10] indx_roi = sender_object[15] lo_hi = sender_object[17:] signal = self.get_roi_signal(indx_ch, indx_roi, self.lo_hi.index(lo_hi)) value = sender.sender().value() signal.put(int(value/10)) print(f' Value {value}') self.roi_values[int(indx_ch)-1, int(indx_roi)-1, self.lo_hi.index(lo_hi)]= value self.update_roi_plot()
def toggle_exhaust_reactor(self): sender = QObject() sender_object = sender.sender() sender_name = sender_object.objectName() ch_num = sender_name[14] if sender_name.endswith('exhaust') and sender_object.isChecked(): self.ghs['channels'][ch_num]['exhaust'].set(1) ttime.sleep(2) self.ghs['channels'][ch_num]['reactor'].set(0) if sender_name.endswith('reactor') and sender_object.isChecked(): self.ghs['channels'][ch_num]['reactor'].set(1) ttime.sleep(2) self.ghs['channels'][ch_num]['exhaust'].set(0)
def update_reference(self): sender = QObject() sender_object = sender.sender().objectName() coord = sender_object[-2:] x_value = self.sample_stage.x.position y_value = self.sample_stage.y.position setattr(self, 'reference_x_{}'.format(coord), x_value) setattr(self, 'reference_y_{}'.format(coord), y_value) getattr(self, 'lineEdit_reference_x_{}'.format(coord)).setText( '{:.3f}'.format(x_value)) getattr(self, 'lineEdit_reference_y_{}'.format(coord)).setText( '{:.3f}'.format(y_value))
def toggle_bypass_bubbler(self): sender = QObject() sender_object = sender.sender() sender_name = sender_object.objectName() ch_num = sender_name[14] bypass_num = sender_name[-1] if (sender_name.endswith('bypass1') or sender_name.endswith('bypass2')) and sender_object.isChecked(): self.RE(bps.mv(self.ghs['channels'][ch_num][f'bypass{bypass_num}'], 1)) self.RE(bps.mv(self.ghs['channels'][ch_num][f'bubbler{bypass_num}_1'], 0)) self.RE(bps.mv(self.ghs['channels'][ch_num][f'bubbler{bypass_num}_2'], 0)) elif (sender_name.endswith('bubbler1') or sender_name.endswith('bubbler2')) and sender_object.isChecked(): self.RE(bps.mv(self.ghs['channels'][ch_num][f'bypass{bypass_num}'], 0)) self.RE(bps.mv(self.ghs['channels'][ch_num][f'bubbler{bypass_num}_1'], 1)) self.RE(bps.mv(self.ghs['channels'][ch_num][f'bubbler{bypass_num}_2'], 1))
def update_ds_params(self): sender = QObject() sender_object = sender.sender().objectName() print(sender_object) selection = self.listView_xasproject.selectedIndexes() if selection != []: index=selection[0].row() ds = self.xasproject[index] try: self.statusBar().showMessage(sender_object) print(getattr(self, sender_object).text()) setattr(ds, self.lineEdit_to_ds_parameter_dict[sender_object], float(getattr(self, sender_object).text())) except: self.statusBar().showMessage('Use numbers only')
def load_sample_definition(self): sender = QObject() sender_object = sender.sender().objectName() coord = sender_object[-2:] excel_file = QtWidgets.QFileDialog.getOpenFileNames( directory='/nsls2/xf08id/Sandbox', filter='*.xlsx', parent=self)[0] if len(excel_file): self.label_database_status.setText( 'Loading {} to Sample Frame {}'.format( os.path.basename(excel_file[0]), coord)) setattr(self, 'batch_experiment_{}'.format(coord), XASBatchExperiment(excel_file=excel_file[0], hhm=self.hhm)) print(self.batch_experiment_11)
def fromQImage(layerNode, image, position=None): """Paste given `image` to `position` in '`layerNode` The `position` value can be: - None, in this case, pixmap will be pasted at position (0, 0) - A QPoint() object, pixmap will be pasted at defined position """ # NOTE: layerNode can be a QObject... # that's weird, but document.nodeByUniqueID() return a QObject for a paintlayer (other Nodes seems to be Ok...) # it can sound strange but in this case the returned QObject is a QObject iwht Node properties # so, need to check if QObject have expected methods if type(layerNode)==QObject(): if hasattr(layerNode, 'type') and hasattr(layerNode, 'colorModel') and hasattr(layerNode, 'colorDepth') and hasattr(layerNode, 'colorProfile') and hasattr(layerNode, 'setColorSpace') and hasattr(layerNode, 'setPixelData'): pass else: # consider that it's not a node raise EInvalidType("Given `layerNode` must be a valid Krita <Node> ") elif not isinstance(layerNode, Node): raise EInvalidType("Given `layerNode` must be a valid Krita <Node> ") if not isinstance(image, QImage): raise EInvalidType("Given `image` must be a valid <QImage> ") if position is None: position = QPoint(0, 0) if not isinstance(position, QPoint): raise EInvalidType("Given `position` must be a valid <QPoint> ") layerNeedBackConversion=False layerColorModel=layerNode.colorModel() layerColorDepth=layerNode.colorDepth() layerColorProfile=layerNode.colorProfile() if layerColorModel != "RGBA" or layerColorDepth != 'U8': # we need to convert layer to RGBA/U8 layerNode.setColorSpace("RGBA", "U8", "sRGB-elle-V2-srgbtrc.icc") layerNeedBackConversion=True ptr = image.bits() ptr.setsize(image.byteCount()) layerNode.setPixelData(QByteArray(ptr.asstring()), position.x(), position.y(), image.width(), image.height()) if layerNeedBackConversion: layerNode.setColorSpace(layerColorModel, layerColorDepth, layerColorProfile)
def __init__(self, nx=0, ny=0, l0=0, m0=0, dl=1, dm=1, image=None): QwtPlotItem.__init__(self) # name, if any self.name = self.filename = None # internal init self.RenderAntialiased self._qo = QObject() self.qimg = None self._image = self._imgminmax = None self._nvaluecalls = 0 self._value_time = self._value_time0 = None self._lminmax = (0, 0) self._mminmax = (0, 0) self._cache_qimage = {} self._cache_mapping = self._cache_imap = self._cache_interp = None self._psfsize = 0, 0, 0 #self.projection = None self._nx, self._ny = 0, 0 self._l0, self._m0 = 0, 0 self._dl, self._dm = 0, 0 self._x0, self._y0 = 0, 0 self._lminmax = None self._mminmax = None self._bounding_rect = None self._bounding_rect_pix = None self._image_key = None self._prefilter = None self._current_rect = None self._current_rect_pix = None # set image, if specified if image is not None: nx, ny = image.shape self.setImage(image) # set coordinates, if specified if nx and ny: self.setImageCoordinates(nx, ny, l0, m0, dl, dm) # set default colormap and intensity map self.colormap = Colormaps.GreyscaleColormap self.imap = Colormaps.LinearIntensityMap() self.signalRepaint = None self.signalSlice = None self.signalRaise = None self.signalUnload = None self.signalCenter = None self.signalPlotRaised = None
def select_gases(self): sender = QObject() sender_object = sender.sender() sender_name = sender_object.objectName() gas = sender_object.currentText() #print(sender_name) indx_ch, indx_mnf = re.findall(r'\d+', sender_name) gas_command = self.ghs['manifolds'][indx_mnf]['gases'][gas] # print(f'Gas command {gas_command}') self.ghs['manifolds'][indx_mnf]['gas_selector'].set(gas_command) #change the gas selection for the other widget - they both come from the same source sub_dict = {'1':'2','2':'1'} other_selector = getattr(self, f'comboBox_ch{sub_dict[indx_ch]}_mnf{indx_mnf}_gas') #print(other_selector.objectName()) st = other_selector.blockSignals(True) other_selector.setCurrentIndex(sender_object.currentIndex()) other_selector.blockSignals(st)
def show_sample_definition(self): sender = QObject() sender_object = sender.sender().objectName() coord = sender_object[-2:] if hasattr(self, 'batch_experiment_{}'.format(coord)): exp = getattr(self, 'batch_experiment_{}'.format(coord)) self.tableWidget_sample_def.setRowCount(len(exp.experiment_table)) self.label_database_status.setText(exp.name) for i in range(len(exp.experiment_table)): d = exp.experiment_table.iloc[i] fields = [ 'Proposal', 'SAF', 'Sample name', 'Composition', 'Element', 'Edge', 'Energy' ] for j, field in enumerate(fields): self.tableWidget_sample_def.setItem( i, j, QtWidgets.QTableWidgetItem(str(d[field]))) self.tableWidget_sample_def.setRowHeight(i, 24) else: self.label_database_status.setText( 'Please load Experimental Definition first')
def set_ds_params_from_plot(self): sender = QObject() self.sender_object = sender.sender().objectName() self.statusBar().showMessage('Click on graph or press Esc') self.cid = self.canvasXASProject.mpl_connect('button_press_event', self.mouse_press_event)
def __init__(self, rest): QObject().__init__(self) self.mutex = QMutex()
def run_2d_pcl_scan(self): self.figure_scan.ax.set_aspect('auto') sender = QObject() sender_object = sender.sender().objectName() if 'xy' in sender_object: m1 = 'x' m2 = 'y' elif 'py' in sender_object: m1 = 'pitch' m2 = 'yaw' self.canvas_scan.mpl_disconnect(self.cid_scan) detector_name = self.comboBox_pcl_detectors.currentText() detector = self.detector_dictionary[detector_name]['device'] channels = self.detector_dictionary[detector_name]['channels'] channel = channels[self.comboBox_pcl_channels.currentIndex()] motor1 = self.motor_dictionary[f'six_axes_stage_{m1}']['object'] motor2 = self.motor_dictionary[f'six_axes_stage_{m2}']['object'] m1_pos = motor1.read()[motor1.name]['value'] m2_pos = motor2.read()[motor2.name]['value'] motor1_range = getattr(self, f'doubleSpinBox_range_{m1}').value() motor2_range = getattr(self, f'doubleSpinBox_range_{m2}').value() motor1_step = getattr(self, f'doubleSpinBox_step_{m1}').value() motor2_step = getattr(self, f'doubleSpinBox_step_{m2}').value() motor1_nsteps = int(round(motor1_range / float(motor1_step))) + 1 motor2_nsteps = int(round(motor2_range / float(motor2_step))) + 1 #self.figure_scan.clf() update_figure_with_colorbar([self.figure_scan.ax], self.toolbar_scan, self.canvas_scan, self.figure_scan) plan = self.aux_plan_funcs['general_spiral_scan']( [detector], motor1=motor1, motor2=motor2, motor1_range=motor1_range, motor2_range=motor2_range, motor1_nsteps=motor1_nsteps, motor2_nsteps=motor2_nsteps) # xlim = live_scatter = LiveScatter(motor1.name, motor2.name, channel, ax=self.figure_scan.ax, xlim=(m1_pos - motor1_range / 2, m1_pos + motor1_range / 2), ylim=(m2_pos - motor2_range / 2, m2_pos + motor2_range / 2), **{ 's': 100, 'marker': 's', 'cmap': 'nipy_spectral' }) # live_scatter = LivePlot(channel, self.motor.name, ax=self.figure_scan.ax) uid = self.RE(plan, live_scatter) self.figure_scan.ax.set_aspect('auto') self.figure_scan.tight_layout() self.canvas_scan.draw_idle() self.cid_scan = self.canvas_scan.mpl_connect('button_press_event', self.getX_scan) self.last_motor_used = [motor1, motor2]
def _on_button_clicked(checked: bool): # Небольшой костыль для получения объекта, который отправил сигнал # Костыль не нужен будет если метод будет внутри виджета -- button = self.sender() button = QObject().sender() print(button, button.text(), button.isChecked(), checked)
def change_rga_mass(self): sender_object = QObject().sender() indx = sender_object.objectName()[-1] self.RE(bps.mv(self.rga_masses[int(indx) - 1], sender_object.value()))
# Author: Savenko Mike from datetime import datetime from logging import error from sys import argv, exc_info from traceback import format_exception from PyQt5.Qt import QMainWindow, QMessageBox, QObject, QApplication, \ QGridLayout, QTableWidget, QScrollArea, QLabel, QLineEdit, QWidget, \ QPushButton, QHBoxLayout, pyqtSlot, QSizePolicy, QDateEdit, QDate, \ QGroupBox, QStackedWidget, QComboBox, QVBoxLayout, QMetaObject, \ QCoreApplication, QMenuBar, QMenu, QStatusBar, QAction, QDialog, QFileDialog from about import Ui_Dialog tr = QObject().tr class Ui(QApplication): def __init__(self): super().__init__(argv) self.w = QMainWindow() self.w.setMinimumWidth(300) self.w.setMinimumHeight(300) # self.w.setWindowTitle(tr("Отправка запросов на ВС АУГО")) self.cw = QScrollArea() # self.__create_ui() self.__showed = False self.__wgts = {} self.cb = QComboBox() self.individuals = []
'''object的父子关系''' from PyQt5.Qt import QObject from PyQt5.Qt import * object0 = QObject() object1 = QObject() object2 = QObject() object3 = QObject() object4 = QObject() object5 = QObject() object1.setParent(object0) # setParent设置对象的父类 object2.setParent(object0) object3.setParent(object1) object4.setParent(object1) object5.setParent(object2) print('objext0', object0) print('objext1', object1) print('objext2', object2) print('objext3', object3) print('objext4', object4) print('objext5', object5) print('objext1 parent ', object1.parent()) # object1.parent()返回object1的父类 print('objext5 parent ', object5.parent()) print(object0.findChild(object)) #返回一个子类 object2.setObjectName('b') print(object0.findChild(object, 'b')) #返回一个ObjectName为b的子类