def make_E_widgets(self): self.E_widget = QtWidgets.QWidget() self._layout = QtWidgets.QVBoxLayout() self._parameter_layout = QtWidgets.QGridLayout() self.E_low_sb = DoubleSpinBoxAlignRight() self.E_high_sb = DoubleSpinBoxAlignRight() self.E_low_sb.setMinimumWidth(100) self.E_high_sb.setMinimumWidth(100) self.E_low_sb.setMaximum(1000) self.E_low_sb.setMinimum(1) self.E_low_sb.setValue(34) self.E_low_sb.setMaximum(1000) self.E_low_sb.setMinimum(1) self.E_high_sb.setValue(68) self._parameter_layout.addWidget(QtWidgets.QLabel('E'), 1, 0) self._parameter_layout.addWidget(QtWidgets.QLabel('Low'), 0, 1) self._parameter_layout.addWidget(QtWidgets.QLabel('High'), 0, 2) self._parameter_layout.addWidget(QtWidgets.QLabel('KeV'), 1, 3) self._parameter_layout.addWidget(self.E_low_sb, 1, 1) self._parameter_layout.addWidget(self.E_high_sb, 1, 2) self._layout.addLayout(self._parameter_layout) self._layout.addSpacerItem(VerticalSpacerItem()) self.E_widget.setLayout(self._layout) self.E_low_sb.valueChanged.connect(self.update) self.E_high_sb.valueChanged.connect(self.update)
def add_row_number_field(self, parent, option, text, value): button_widget = QtWidgets.QWidget(parent) button_widget.setObjectName(option) _button_layout = QtWidgets.QHBoxLayout() _button_layout.setContentsMargins(5, 5, 5, 5) #_button_layout.setSpacing(5) option_lbl = QtWidgets.QLabel(text) _button_layout.addSpacerItem(HorizontalSpacerItem()) value_control = DoubleSpinBoxAlignRight() value_control.setMinimumWidth(120) value_control.setMaximum(10000) value_control.setDecimals(0) value_control.setValue(value) _button_layout.addWidget(option_lbl) _button_layout.addWidget(value_control) button_widget.setLayout(_button_layout) return [button_widget, value_control]
def make_beam_parameter_widget(self): self.beam_parameter_widget = QtWidgets.QWidget() self._beam_layout = QtWidgets.QVBoxLayout() self._beam_parameter_layout = QtWidgets.QGridLayout() self.tip_size_sb = DoubleSpinBoxAlignRight() self.tip_size_sb.setMinimumWidth(100) self.tip_size_sb.setMaximum(1000) self.tip_size_sb.setMinimum(5e-3) self.tip_size_sb.setValue(0.05) self.tip_size_sb.setDecimals(3) self.tip_size_sb.setSingleStep(0.005) self.tip_distance_sb = DoubleSpinBoxAlignRight() self.tip_distance_sb.setMinimumWidth(100) self.tip_distance_sb.setMaximum(10000) self.tip_distance_sb.setMinimum(1e-3) self.tip_distance_sb.setValue(60) self.det_distance_sb = DoubleSpinBoxAlignRight() self.det_distance_sb.setMinimumWidth(100) self.det_distance_sb.setMaximum(10000) self.det_distance_sb.setMinimum(1e-3) self.det_distance_sb.setValue(600) self._beam_parameter_layout.addWidget( QtWidgets.QLabel('Beam alignment parameters'), 0, 0, 1, 2) self._beam_parameter_layout.addWidget(QtWidgets.QLabel('Tip size'), 1, 0) self._beam_parameter_layout.addWidget(QtWidgets.QLabel('Tip distance'), 2, 0) self._beam_parameter_layout.addWidget( QtWidgets.QLabel('Detector distance'), 3, 0) #self._beam_parameter_layout.addWidget(QtWidgets.QLabel('mm'), 1, 3) self._beam_parameter_layout.addWidget(self.tip_size_sb, 1, 1) self._beam_parameter_layout.addWidget(self.tip_distance_sb, 2, 1) self._beam_parameter_layout.addWidget(self.det_distance_sb, 3, 1) self._beam_parameter_layout.addWidget( QtWidgets.QLabel( 'D0: Collimation depth at the sample center (mm)'), 5, 0, 1, 2) self._beam_parameter_layout.addWidget( QtWidgets.QLabel('D1: Maximum collimation depth (mm)'), 6, 0, 1, 2) self._beam_layout.addLayout(self._beam_parameter_layout) self._beam_layout.addSpacerItem(VerticalSpacerItem()) self.beam_parameter_widget.setLayout(self._beam_layout)
def setupUi(self): self._layout = QtWidgets.QVBoxLayout() self.setWindowTitle(self.title) self.button_widget = QtWidgets.QWidget(self) self.button_widget.setObjectName('options_control_button_widget') self._button_layout = QtWidgets.QHBoxLayout() self._button_layout.setContentsMargins(0, 0, 0, 0) self._button_layout.setSpacing(15) self.apply_btn = FlatButton('Apply') self.apply_btn.clicked.connect(self.apply) self._button_layout.addWidget(self.apply_btn,0) #self._button_layout.addWidget(VerticalLine()) self._button_layout.addSpacerItem(HorizontalSpacerItem()) #self._button_layout.addWidget(VerticalLine()) self.button_widget.setLayout(self._button_layout) self.parameter_widget = QtWidgets.QWidget() self._parameter_layout = QtWidgets.QGridLayout() self._parameter_layout.addWidget(QtWidgets.QLabel('Parameter'), 0, 1) self._parameter_layout.addWidget(QtWidgets.QLabel('Step'), 0, 3) self.opt_controls = {} i = 1 for opt in self.opts_fields: self._parameter_layout.addWidget(QtWidgets.QLabel(self.opts_fields[opt]['label']), i, 0) self._parameter_layout.addWidget(QtWidgets.QLabel(self.opts_fields[opt]['unit']), i, 2) val=self.opts_fields[opt]['val'] e = is_e(val) if e: o = NumberTextField() else: o = DoubleSpinBoxAlignRight() o.setObjectName(opt+"_control") o.setValue(val) o.setToolTip(self.opts_fields[opt]['desc']) o.setMinimum (self.opts_fields[opt]['step']) o.setMinimumWidth(100) if not e: o.setSingleStep (self.opts_fields[opt]['step']) o_step = DoubleMultiplySpinBoxAlignRight() o_step.setObjectName(opt+"_control_step") o_step.setMinimum (0) step = self.opts_fields[opt]['step'] o_step.setValue(self.opts_fields[opt]['step']) if isinstance( self.opts_fields[opt]['val'], int): o.setDecimals(0) o.setMinimum(1) if not e: o_step.setMinimum(1) o_step.setDecimals(0) o_step.valueChanged.connect(partial(self.update_step, opt)) self.opt_controls[opt]= {'val':o,'step':o_step} self._parameter_layout.addWidget(o, i, 1) self._parameter_layout.addWidget(o_step, i, 3) self._parameter_layout.addItem(HorizontalSpacerItem(), i, 4) i += 1 self._parameter_layout.addItem(VerticalSpacerItem(), i, 0) self.parameter_widget.setLayout(self._parameter_layout) self._body_layout = QtWidgets.QHBoxLayout() self._body_layout.addWidget(self.parameter_widget, 0) self._layout.addLayout(self._body_layout) self._layout.addWidget(HorizontalLine()) self._layout.addWidget(self.button_widget) self.setLayout(self._layout) self.retranslateUi(self) self.style_widgets()
def __init__(self): super(PhaseWidget, self).__init__() self._layout = QtWidgets.QVBoxLayout() self.setWindowTitle('Phase control') self.button_widget = QtWidgets.QWidget(self) self.button_widget.setObjectName('phase_control_button_widget') self._button_layout = QtWidgets.QHBoxLayout() self._button_layout.setContentsMargins(0, 0, 0, 0) self._button_layout.setSpacing(6) self.add_btn = QtWidgets.QPushButton('Add') self.edit_btn = QtWidgets.QPushButton('Edit') self.delete_btn = QtWidgets.QPushButton('Delete') self.clear_btn = QtWidgets.QPushButton('Clear') self.rois_btn = QtWidgets.QPushButton('Add ROIs') self.save_list_btn = QtWidgets.QPushButton('Save List') self.load_list_btn = QtWidgets.QPushButton('Load List') self._button_layout.addWidget(self.add_btn, 0) self._button_layout.addWidget(self.edit_btn, 0) self._button_layout.addWidget(self.delete_btn, 0) self._button_layout.addWidget(self.clear_btn, 0) self._button_layout.addWidget(self.rois_btn, 0) self._button_layout.addWidget(VerticalLine()) self._button_layout.addSpacerItem(HorizontalSpacerItem()) self._button_layout.addWidget(VerticalLine()) self._button_layout.addWidget(self.save_list_btn, 0) self._button_layout.addWidget(self.load_list_btn, 0) self.button_widget.setLayout(self._button_layout) self._layout.addWidget(self.button_widget) self.parameter_widget = QtWidgets.QWidget() self._parameter_layout = QtWidgets.QGridLayout() self.pressure_sb = DoubleSpinBoxAlignRight() self.temperature_sb = DoubleSpinBoxAlignRight() self.pressure_step_msb = DoubleMultiplySpinBoxAlignRight() self.temperature_step_msb = DoubleMultiplySpinBoxAlignRight() self.apply_to_all_cb = QtWidgets.QCheckBox('Apply to all phases') self.show_in_pattern_cb = QtWidgets.QCheckBox('Show in Pattern') self.tth_lbl = DoubleSpinBoxAlignRight() self.tth_step = DoubleMultiplySpinBoxAlignRight() self.get_tth_btn = QtWidgets.QPushButton('Get') self._parameter_layout.addWidget(QtWidgets.QLabel('Parameter'), 0, 1) self._parameter_layout.addWidget(QtWidgets.QLabel('Step'), 0, 3) self._parameter_layout.addWidget(QtWidgets.QLabel('P:'), 1, 0) self._parameter_layout.addWidget(QtWidgets.QLabel('T:'), 2, 0) self._parameter_layout.addWidget(QtWidgets.QLabel('GPa'), 1, 2) self._parameter_layout.addWidget(QtWidgets.QLabel('K'), 2, 2) self._parameter_layout.addWidget(self.pressure_sb, 1, 1) self._parameter_layout.addWidget(self.pressure_step_msb, 1, 3) self._parameter_layout.addWidget(self.temperature_sb, 2, 1) self._parameter_layout.addWidget(self.temperature_step_msb, 2, 3) self._parameter_layout.addWidget(self.apply_to_all_cb, 3, 0, 1, 5) #self._parameter_layout.addWidget(self.show_in_pattern_cb, 4, 0, 1, 5) self._parameter_layout.addWidget(HorizontalLine(), 5, 0, 1, 5) self._parameter_layout.addItem(VerticalSpacerItem(), 6, 0) self._parameter_layout.addWidget(HorizontalLine(), 7, 0, 1, 5) self._parameter_layout.addWidget(QtWidgets.QLabel(u'2θ:'), 8, 0) self._parameter_layout.addWidget(self.tth_lbl, 8, 1) self._parameter_layout.addWidget(QtWidgets.QLabel('deg'), 8, 2) self._parameter_layout.addWidget(self.tth_step, 8, 3) self._parameter_layout.addWidget(self.get_tth_btn, 8, 4) self.parameter_widget.setLayout(self._parameter_layout) self._body_layout = QtWidgets.QHBoxLayout() self.phase_tw = ListTableWidget(columns=5) self._body_layout.addWidget(self.phase_tw) self._body_layout.addWidget(self.parameter_widget, 0) self._layout.addLayout(self._body_layout) self.setLayout(self._layout) self.style_widgets() self.phase_show_cbs = [] self.phase_color_btns = [] #self.phase_roi_btns = [] #add ROIs (RH) self.show_parameter_in_pattern = True header_view = QtWidgets.QHeaderView(QtCore.Qt.Horizontal, self.phase_tw) self.phase_tw.setHorizontalHeader(header_view) #header_view.setResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) header_view.setResizeMode(2, QtWidgets.QHeaderView.Stretch) header_view.setResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) header_view.setResizeMode(4, QtWidgets.QHeaderView.ResizeToContents) header_view.hide() self.phase_tw.setItemDelegate(NoRectDelegate()) self.pressure_sb.valueChanged.connect(self.pressure_sb_changed) self.temperature_sb.valueChanged.connect(self.temperature_sb_changed) self.setAcceptDrops(True)
class PhaseWidget(QtWidgets.QWidget): color_btn_clicked = QtCore.pyqtSignal(int, QtWidgets.QWidget) show_cb_state_changed = QtCore.pyqtSignal(int, bool) file_dragged_in = QtCore.pyqtSignal(list) pressure_sb_value_changed = QtCore.Signal(int, float) temperature_sb_value_changed = QtCore.Signal(int, float) def __init__(self): super(PhaseWidget, self).__init__() self._layout = QtWidgets.QVBoxLayout() self.setWindowTitle('Phase control') self.button_widget = QtWidgets.QWidget(self) self.button_widget.setObjectName('phase_control_button_widget') self._button_layout = QtWidgets.QHBoxLayout() self._button_layout.setContentsMargins(0, 0, 0, 0) self._button_layout.setSpacing(6) self.add_btn = QtWidgets.QPushButton('Add') self.edit_btn = QtWidgets.QPushButton('Edit') self.delete_btn = QtWidgets.QPushButton('Delete') self.clear_btn = QtWidgets.QPushButton('Clear') self.rois_btn = QtWidgets.QPushButton('Add ROIs') self.save_list_btn = QtWidgets.QPushButton('Save List') self.load_list_btn = QtWidgets.QPushButton('Load List') self._button_layout.addWidget(self.add_btn, 0) self._button_layout.addWidget(self.edit_btn, 0) self._button_layout.addWidget(self.delete_btn, 0) self._button_layout.addWidget(self.clear_btn, 0) self._button_layout.addWidget(self.rois_btn, 0) self._button_layout.addWidget(VerticalLine()) self._button_layout.addSpacerItem(HorizontalSpacerItem()) self._button_layout.addWidget(VerticalLine()) self._button_layout.addWidget(self.save_list_btn, 0) self._button_layout.addWidget(self.load_list_btn, 0) self.button_widget.setLayout(self._button_layout) self._layout.addWidget(self.button_widget) self.parameter_widget = QtWidgets.QWidget() self._parameter_layout = QtWidgets.QGridLayout() self.pressure_sb = DoubleSpinBoxAlignRight() self.temperature_sb = DoubleSpinBoxAlignRight() self.pressure_step_msb = DoubleMultiplySpinBoxAlignRight() self.temperature_step_msb = DoubleMultiplySpinBoxAlignRight() self.apply_to_all_cb = QtWidgets.QCheckBox('Apply to all phases') self.show_in_pattern_cb = QtWidgets.QCheckBox('Show in Pattern') self.tth_lbl = DoubleSpinBoxAlignRight() self.tth_step = DoubleMultiplySpinBoxAlignRight() self.get_tth_btn = QtWidgets.QPushButton('Get') self._parameter_layout.addWidget(QtWidgets.QLabel('Parameter'), 0, 1) self._parameter_layout.addWidget(QtWidgets.QLabel('Step'), 0, 3) self._parameter_layout.addWidget(QtWidgets.QLabel('P:'), 1, 0) self._parameter_layout.addWidget(QtWidgets.QLabel('T:'), 2, 0) self._parameter_layout.addWidget(QtWidgets.QLabel('GPa'), 1, 2) self._parameter_layout.addWidget(QtWidgets.QLabel('K'), 2, 2) self._parameter_layout.addWidget(self.pressure_sb, 1, 1) self._parameter_layout.addWidget(self.pressure_step_msb, 1, 3) self._parameter_layout.addWidget(self.temperature_sb, 2, 1) self._parameter_layout.addWidget(self.temperature_step_msb, 2, 3) self._parameter_layout.addWidget(self.apply_to_all_cb, 3, 0, 1, 5) #self._parameter_layout.addWidget(self.show_in_pattern_cb, 4, 0, 1, 5) self._parameter_layout.addWidget(HorizontalLine(), 5, 0, 1, 5) self._parameter_layout.addItem(VerticalSpacerItem(), 6, 0) self._parameter_layout.addWidget(HorizontalLine(), 7, 0, 1, 5) self._parameter_layout.addWidget(QtWidgets.QLabel(u'2θ:'), 8, 0) self._parameter_layout.addWidget(self.tth_lbl, 8, 1) self._parameter_layout.addWidget(QtWidgets.QLabel('deg'), 8, 2) self._parameter_layout.addWidget(self.tth_step, 8, 3) self._parameter_layout.addWidget(self.get_tth_btn, 8, 4) self.parameter_widget.setLayout(self._parameter_layout) self._body_layout = QtWidgets.QHBoxLayout() self.phase_tw = ListTableWidget(columns=5) self._body_layout.addWidget(self.phase_tw) self._body_layout.addWidget(self.parameter_widget, 0) self._layout.addLayout(self._body_layout) self.setLayout(self._layout) self.style_widgets() self.phase_show_cbs = [] self.phase_color_btns = [] #self.phase_roi_btns = [] #add ROIs (RH) self.show_parameter_in_pattern = True header_view = QtWidgets.QHeaderView(QtCore.Qt.Horizontal, self.phase_tw) self.phase_tw.setHorizontalHeader(header_view) #header_view.setResizeMode(1, QtWidgets.QHeaderView.ResizeToContents) header_view.setResizeMode(2, QtWidgets.QHeaderView.Stretch) header_view.setResizeMode(3, QtWidgets.QHeaderView.ResizeToContents) header_view.setResizeMode(4, QtWidgets.QHeaderView.ResizeToContents) header_view.hide() self.phase_tw.setItemDelegate(NoRectDelegate()) self.pressure_sb.valueChanged.connect(self.pressure_sb_changed) self.temperature_sb.valueChanged.connect(self.temperature_sb_changed) self.setAcceptDrops(True) def pressure_sb_changed(self): cur_ind = self.get_selected_phase_row() pressure = self.pressure_sb.value() self.pressure_sb_value_changed.emit(cur_ind, pressure) def temperature_sb_changed(self): cur_ind = self.get_selected_phase_row() temperature = self.temperature_sb.value() self.temperature_sb_value_changed.emit(cur_ind, temperature) def style_widgets(self): self.phase_tw.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.MinimumExpanding) self.parameter_widget.setSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self.phase_tw.setMinimumHeight(120) self.temperature_step_msb.setMaximumWidth(75) self.pressure_step_msb.setMaximumWidth(75) self.tth_step.setMaximumWidth(75) self.get_tth_btn.setMaximumWidth(75) self.pressure_sb.setMinimumWidth(100) self.pressure_sb.setMaximum(9999999) self.pressure_sb.setMinimum(-9999999) self.pressure_sb.setValue(0) self.pressure_step_msb.setMaximum(1000.0) self.pressure_step_msb.setMinimum(0.01) self.pressure_step_msb.setValue(0.2) self.temperature_sb.setMaximum(99999999) self.temperature_sb.setMinimum(0) self.temperature_sb.setValue(298) self.temperature_step_msb.setMaximum(1000.0) self.temperature_step_msb.setMinimum(1.0) self.temperature_step_msb.setValue(50.0) self.tth_lbl.setMaximum(179.0) self.tth_lbl.setMinimum(1) self.tth_lbl.setDecimals(5) self.tth_step.setMaximum(180) self.tth_step.setMinimum(0.001) self.tth_step.setValue(1) self.tth_step.setDecimals(3) self.setStyleSheet(""" #phase_control_button_widget QPushButton { min-width: 70; } """) self.apply_to_all_cb.setChecked(True) self.show_in_pattern_cb.setChecked(True) # ############################################################################################### # Now comes all the phase tw stuff ################################################################################################ def add_phase(self, name, color): self.phase_tw.blockSignals(True) current_rows = self.phase_tw.rowCount() self.phase_tw.setRowCount(current_rows + 1) show_cb = QtWidgets.QCheckBox() show_cb.setChecked(True) show_cb.stateChanged.connect( partial(self.phase_show_cb_changed, show_cb)) show_cb.setStyleSheet("background-color: transparent") self.phase_tw.setCellWidget(current_rows, 0, show_cb) self.phase_show_cbs.append(show_cb) color_button = FlatButton() color_button.setStyleSheet("background-color: " + color) color_button.clicked.connect( partial(self.phase_color_btn_click, color_button)) self.phase_tw.setCellWidget(current_rows, 1, color_button) self.phase_color_btns.append(color_button) name_item = QtWidgets.QTableWidgetItem(name) name_item.setFlags(name_item.flags() & ~QtCore.Qt.ItemIsEditable) name_item.setTextAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) self.phase_tw.setItem(current_rows, 2, name_item) pressure_item = QtWidgets.QTableWidgetItem('0 GPa') pressure_item.setFlags(pressure_item.flags() & ~QtCore.Qt.ItemIsEditable) pressure_item.setTextAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) self.phase_tw.setItem(current_rows, 3, pressure_item) temperature_item = QtWidgets.QTableWidgetItem('298 K') temperature_item.setFlags(temperature_item.flags() & ~QtCore.Qt.ItemIsEditable) temperature_item.setTextAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) self.phase_tw.setItem(current_rows, 4, temperature_item) self.phase_tw.setColumnWidth(0, 35) self.phase_tw.setColumnWidth(1, 25) self.phase_tw.setRowHeight(current_rows, 25) self.select_phase(current_rows) self.phase_tw.blockSignals(False) def select_phase(self, ind): self.phase_tw.selectRow(ind) def get_selected_phase_row(self): selected = self.phase_tw.selectionModel().selectedRows() try: row = selected[0].row() except IndexError: row = -1 return row def get_phase(self): pass def del_phase(self, ind): self.phase_tw.blockSignals(True) self.phase_tw.removeRow(ind) self.phase_tw.blockSignals(False) del self.phase_show_cbs[ind] del self.phase_color_btns[ind] if self.phase_tw.rowCount() > ind: self.select_phase(ind) else: self.select_phase(self.phase_tw.rowCount() - 1) def rename_phase(self, ind, name): name_item = self.phase_tw.item(ind, 2) name_item.setText(name) def set_phase_temperature(self, ind, T): temperature_item = self.phase_tw.item(ind, 4) try: temperature_item.setText("{0:.2f} K".format(T)) except ValueError: temperature_item.setText("{0} K".format(T)) def get_phase_temperature(self, ind): temperature_item = self.phase_tw.item(ind, 4) try: temperature = float(str(temperature_item.text()).split()[0]) except: temperature = None return temperature def set_phase_pressure(self, ind, P): pressure_item = self.phase_tw.item(ind, 3) try: pressure_item.setText("{0:.2f} GPa".format(P)) except ValueError: pressure_item.setText("{0} GPa".format(P)) def get_phase_pressure(self, ind): pressure_item = self.phase_tw.item(ind, 3) pressure = float(str(pressure_item.text()).split()[0]) return pressure def phase_color_btn_click(self, button): self.color_btn_clicked.emit(self.phase_color_btns.index(button), button) def phase_show_cb_changed(self, checkbox): self.show_cb_state_changed.emit(self.phase_show_cbs.index(checkbox), checkbox.isChecked()) def phase_show_cb_set_checked(self, ind, state): checkbox = self.phase_show_cbs[ind] checkbox.setChecked(state) def phase_show_cb_is_checked(self, ind): checkbox = self.phase_show_cbs[ind] return checkbox.isChecked() def raise_widget(self): self.show() self.setWindowState(self.windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive) self.activateWindow() self.raise_() ######################################################################################## def dragEnterEvent(self, e): if e.mimeData().hasUrls: e.accept() else: e.ignore() def dragMoveEvent(self, e): if e.mimeData().hasUrls: e.accept() else: e.ignore() def dropEvent(self, e): """ Drop files directly onto the widget File locations are stored in fname :param e: :return: """ if e.mimeData().hasUrls: e.setDropAction(QtCore.Qt.CopyAction) e.accept() fnames = list() for url in e.mimeData().urls(): fname = str(url.toLocalFile()) fnames.append(fname) self.file_dragged_in.emit(fnames) else: e.ignore() def show_error_msg(self, msg): msg_box = QtWidgets.QMessageBox(self) msg_box.setWindowFlags(QtCore.Qt.Tool) msg_box.setText(msg) msg_box.setIcon(QtWidgets.QMessageBox.Critical) msg_box.setWindowTitle('Error') msg_box.setStandardButtons(QtWidgets.QMessageBox.Ok) msg_box.setDefaultButton(QtWidgets.QMessageBox.Ok) msg_box.exec_()
def __init__(self, model): super(hklGenWidget, self).__init__() self.model = model self._layout = QtWidgets.QVBoxLayout() self.setWindowTitle('Space Group control') self.button_widget = QtWidgets.QWidget(self) self.button_widget.setObjectName('cell_control_button_widget') self._button_layout = QtWidgets.QHBoxLayout() self._button_layout.setContentsMargins(0, 0, 0, 0) self._button_layout.setSpacing(6) self.add_btn = QtWidgets.QPushButton('New') self.edit_btn = QtWidgets.QPushButton('Edit') self.delete_btn = QtWidgets.QPushButton('Delete') self.clear_btn = QtWidgets.QPushButton('Clear') self.rois_btn = QtWidgets.QPushButton('Add ROIs') self.save_list_btn = QtWidgets.QPushButton('Save List') self.load_list_btn = QtWidgets.QPushButton('Load List') # 2th self.tth_lbl = DoubleSpinBoxAlignRight() self.tth_step = DoubleMultiplySpinBoxAlignRight() self.get_tth_btn = QtWidgets.QPushButton('Get') self._button_layout.addWidget(self.add_btn,0) #self._button_layout.addWidget(self.edit_btn,0) self._button_layout.addWidget(self.delete_btn,0) self._button_layout.addWidget(self.clear_btn,0) self._button_layout.addWidget(self.rois_btn,0) #self._button_layout.addWidget(VerticalLine()) self._button_layout.addSpacerItem(HorizontalSpacerItem()) #self._button_layout.addWidget(VerticalLine()) #self._button_layout.addWidget(self.save_list_btn,0) #self._button_layout.addWidget(self.load_list_btn,0) self.button_widget.setLayout(self._button_layout) self._layout.addWidget(self.button_widget) self.symmetry_widget = QtWidgets.QWidget() self._symmetry_layout = QtWidgets.QVBoxLayout() self._symmetry_layout.setContentsMargins(0, 0, 0, 0) self.symmetry_opts = {} self.symmetry_parameters = ('CUBIC', 'TETRAGONAL', 'ORTHORHOMBIC', 'HEXAGONAL', "TRIGONAL", 'RHOMBOHEDRAL', 'MONOCLINIC', 'TRICLINIC') for s in self.symmetry_parameters: o = s[0]+s[1:].lower() opt = QtWidgets.QRadioButton(o) opt.clicked.connect(partial(self.symmetry_edited_callback,o)) self.symmetry_opts[s] = opt self._symmetry_layout.addWidget(opt) self.symmetry_widget.setLayout(self._symmetry_layout) self.lattice_widget = QtWidgets.QWidget() self._lattice_layout = QtWidgets.QVBoxLayout() self.spgrp_widget = QtWidgets.QWidget() self._spgrp_layout = QtWidgets.QHBoxLayout() self._spgrp_layout.setContentsMargins(0, 0, 0, 0) self.spgrp_lbl = QtWidgets.QLabel('Space Group:') self.spgrp_tb = QtWidgets.QLineEdit('P 2 3') self.spgrp_tb.setMaximumWidth(80) self.spgrp_tb.setMinimumWidth(80) self._spgrp_layout.addWidget(self.spgrp_lbl) self._spgrp_layout.addWidget(self.spgrp_tb) self._spgrp_layout.addSpacerItem(HorizontalSpacerItem()) self.spgrp_widget.setLayout(self._spgrp_layout) self._lattice_layout.addWidget(self.spgrp_widget) self.lattice_opts = {} self.lattice_opts_steps = {} self.lattice_parameters = ('a','b','c', 'alpha',"beta",'gamma') default_step = 0.1 default_decimals = 4 for s in self.lattice_parameters: lattice_opt = QtWidgets.QWidget() _lattice_opt_layout = QtWidgets.QHBoxLayout() _lattice_opt_layout.setContentsMargins(0, 0, 0, 0) opt_lbl = QtWidgets.QLabel(s) opt = DoubleSpinBoxAlignRight() opt.setDecimals(default_decimals) opt.setValue(0.) opt.setSingleStep(default_step) opt.setMinimumWidth(90) opt.setMaximum(1000) opt.valueChanged.connect(partial(self.lattice_parameter_edited_callback, s)) opt_step = DoubleMultiplySpinBoxAlignRight() opt_step.setDecimals(default_decimals) opt_step.setMinimumWidth(60) opt_step.setValue(default_step) opt_step.editingFinished.connect(partial(self.update_lattice_param_step, s)) _lattice_opt_layout.addWidget(opt_lbl) _lattice_opt_layout.addWidget(opt) _lattice_opt_layout.addWidget(opt_step) lattice_opt.setLayout(_lattice_opt_layout) self.lattice_opts[s] = opt self.lattice_opts_steps[s] = opt_step self._lattice_layout.addWidget(lattice_opt) self.tth_widget = QtWidgets.QWidget() self._tth_layout = QtWidgets.QGridLayout() self._tth_layout.addWidget(QtWidgets.QLabel(u'2θ:'), 0, 0) self._tth_layout.addWidget(self.tth_lbl, 0, 1) self._tth_layout.addWidget(QtWidgets.QLabel('deg'), 0, 2) self._tth_layout.addWidget(self.tth_step, 0, 3) self._tth_layout.addWidget(self.get_tth_btn, 0, 4) self.tth_widget.setLayout(self._tth_layout) self._lattice_layout.addWidget(self.tth_widget) self.lattice_widget.setLayout(self._lattice_layout) self._body_layout = QtWidgets.QHBoxLayout() self.cell_tw = TreeView() #self._tm=self.model #self.cell_tw.setSortingEnabled(True) self.cell_tw.setModel(self.model) #self.setSelectionMode(QAbstractItemView.ExtendedSelection) # <- optional selection_model = self.cell_tw.selectionModel() selection_model.selectionChanged.connect(self.cell_selection_changed) self.cell_tw.setColumnWidth(0, 50) self.cell_tw.setColumnWidth(1, 25) self.cell_tw.setColumnWidth(2, 50) self.cell_tw.header().hide() self.cell_tw.setMaximumWidth(175) self._body_layout.addWidget(self.cell_tw ) self._body_layout.addWidget(self.symmetry_widget) self._body_layout.addWidget(self.lattice_widget) self.hkl_widget = QtWidgets.QTextEdit() self.hkl_widget.setMaximumWidth(175) self._body_layout.addWidget(self.hkl_widget) self._layout.addLayout(self._body_layout) self.setLayout(self._layout) self.style_widgets() self.cell_show_cbs = [] self.cell_color_btns = [] self.cell_roi_btns = [] #add ROIs self.show_parameter_in_pattern = True #header_view = QtWidgets.QHeaderView(QtCore.Qt.Horizontal, self.cell_tw) #self.cell_tw.setHorizontalHeader(header_view) #header_view.hide() s#elf.cell_tw.setItemDelegate(NoRectDelegate()) self.setAcceptDrops(True)
class hklGenWidget(QtWidgets.QWidget): color_btn_clicked = QtCore.pyqtSignal(int, QtWidgets.QWidget) show_cb_state_changed = QtCore.pyqtSignal(int, bool) file_dragged_in = QtCore.pyqtSignal(list) symmetry_edited_signal = QtCore.pyqtSignal(str) lattice_parameter_edited_signal = QtCore.pyqtSignal(dict) cell_selection_edited_signal = QtCore.pyqtSignal(int) def __init__(self, model): super(hklGenWidget, self).__init__() self.model = model self._layout = QtWidgets.QVBoxLayout() self.setWindowTitle('Space Group control') self.button_widget = QtWidgets.QWidget(self) self.button_widget.setObjectName('cell_control_button_widget') self._button_layout = QtWidgets.QHBoxLayout() self._button_layout.setContentsMargins(0, 0, 0, 0) self._button_layout.setSpacing(6) self.add_btn = QtWidgets.QPushButton('New') self.edit_btn = QtWidgets.QPushButton('Edit') self.delete_btn = QtWidgets.QPushButton('Delete') self.clear_btn = QtWidgets.QPushButton('Clear') self.rois_btn = QtWidgets.QPushButton('Add ROIs') self.save_list_btn = QtWidgets.QPushButton('Save List') self.load_list_btn = QtWidgets.QPushButton('Load List') # 2th self.tth_lbl = DoubleSpinBoxAlignRight() self.tth_step = DoubleMultiplySpinBoxAlignRight() self.get_tth_btn = QtWidgets.QPushButton('Get') self._button_layout.addWidget(self.add_btn,0) #self._button_layout.addWidget(self.edit_btn,0) self._button_layout.addWidget(self.delete_btn,0) self._button_layout.addWidget(self.clear_btn,0) self._button_layout.addWidget(self.rois_btn,0) #self._button_layout.addWidget(VerticalLine()) self._button_layout.addSpacerItem(HorizontalSpacerItem()) #self._button_layout.addWidget(VerticalLine()) #self._button_layout.addWidget(self.save_list_btn,0) #self._button_layout.addWidget(self.load_list_btn,0) self.button_widget.setLayout(self._button_layout) self._layout.addWidget(self.button_widget) self.symmetry_widget = QtWidgets.QWidget() self._symmetry_layout = QtWidgets.QVBoxLayout() self._symmetry_layout.setContentsMargins(0, 0, 0, 0) self.symmetry_opts = {} self.symmetry_parameters = ('CUBIC', 'TETRAGONAL', 'ORTHORHOMBIC', 'HEXAGONAL', "TRIGONAL", 'RHOMBOHEDRAL', 'MONOCLINIC', 'TRICLINIC') for s in self.symmetry_parameters: o = s[0]+s[1:].lower() opt = QtWidgets.QRadioButton(o) opt.clicked.connect(partial(self.symmetry_edited_callback,o)) self.symmetry_opts[s] = opt self._symmetry_layout.addWidget(opt) self.symmetry_widget.setLayout(self._symmetry_layout) self.lattice_widget = QtWidgets.QWidget() self._lattice_layout = QtWidgets.QVBoxLayout() self.spgrp_widget = QtWidgets.QWidget() self._spgrp_layout = QtWidgets.QHBoxLayout() self._spgrp_layout.setContentsMargins(0, 0, 0, 0) self.spgrp_lbl = QtWidgets.QLabel('Space Group:') self.spgrp_tb = QtWidgets.QLineEdit('P 2 3') self.spgrp_tb.setMaximumWidth(80) self.spgrp_tb.setMinimumWidth(80) self._spgrp_layout.addWidget(self.spgrp_lbl) self._spgrp_layout.addWidget(self.spgrp_tb) self._spgrp_layout.addSpacerItem(HorizontalSpacerItem()) self.spgrp_widget.setLayout(self._spgrp_layout) self._lattice_layout.addWidget(self.spgrp_widget) self.lattice_opts = {} self.lattice_opts_steps = {} self.lattice_parameters = ('a','b','c', 'alpha',"beta",'gamma') default_step = 0.1 default_decimals = 4 for s in self.lattice_parameters: lattice_opt = QtWidgets.QWidget() _lattice_opt_layout = QtWidgets.QHBoxLayout() _lattice_opt_layout.setContentsMargins(0, 0, 0, 0) opt_lbl = QtWidgets.QLabel(s) opt = DoubleSpinBoxAlignRight() opt.setDecimals(default_decimals) opt.setValue(0.) opt.setSingleStep(default_step) opt.setMinimumWidth(90) opt.setMaximum(1000) opt.valueChanged.connect(partial(self.lattice_parameter_edited_callback, s)) opt_step = DoubleMultiplySpinBoxAlignRight() opt_step.setDecimals(default_decimals) opt_step.setMinimumWidth(60) opt_step.setValue(default_step) opt_step.editingFinished.connect(partial(self.update_lattice_param_step, s)) _lattice_opt_layout.addWidget(opt_lbl) _lattice_opt_layout.addWidget(opt) _lattice_opt_layout.addWidget(opt_step) lattice_opt.setLayout(_lattice_opt_layout) self.lattice_opts[s] = opt self.lattice_opts_steps[s] = opt_step self._lattice_layout.addWidget(lattice_opt) self.tth_widget = QtWidgets.QWidget() self._tth_layout = QtWidgets.QGridLayout() self._tth_layout.addWidget(QtWidgets.QLabel(u'2θ:'), 0, 0) self._tth_layout.addWidget(self.tth_lbl, 0, 1) self._tth_layout.addWidget(QtWidgets.QLabel('deg'), 0, 2) self._tth_layout.addWidget(self.tth_step, 0, 3) self._tth_layout.addWidget(self.get_tth_btn, 0, 4) self.tth_widget.setLayout(self._tth_layout) self._lattice_layout.addWidget(self.tth_widget) self.lattice_widget.setLayout(self._lattice_layout) self._body_layout = QtWidgets.QHBoxLayout() self.cell_tw = TreeView() #self._tm=self.model #self.cell_tw.setSortingEnabled(True) self.cell_tw.setModel(self.model) #self.setSelectionMode(QAbstractItemView.ExtendedSelection) # <- optional selection_model = self.cell_tw.selectionModel() selection_model.selectionChanged.connect(self.cell_selection_changed) self.cell_tw.setColumnWidth(0, 50) self.cell_tw.setColumnWidth(1, 25) self.cell_tw.setColumnWidth(2, 50) self.cell_tw.header().hide() self.cell_tw.setMaximumWidth(175) self._body_layout.addWidget(self.cell_tw ) self._body_layout.addWidget(self.symmetry_widget) self._body_layout.addWidget(self.lattice_widget) self.hkl_widget = QtWidgets.QTextEdit() self.hkl_widget.setMaximumWidth(175) self._body_layout.addWidget(self.hkl_widget) self._layout.addLayout(self._body_layout) self.setLayout(self._layout) self.style_widgets() self.cell_show_cbs = [] self.cell_color_btns = [] self.cell_roi_btns = [] #add ROIs self.show_parameter_in_pattern = True #header_view = QtWidgets.QHeaderView(QtCore.Qt.Horizontal, self.cell_tw) #self.cell_tw.setHorizontalHeader(header_view) #header_view.hide() s#elf.cell_tw.setItemDelegate(NoRectDelegate()) self.setAcceptDrops(True) def style_widgets(self): self.tth_step.setMaximumWidth(75) self.get_tth_btn.setMaximumWidth(75) self.tth_lbl.setMaximum(179.0) self.tth_lbl.setMinimum(1) self.tth_lbl.setDecimals(5) self.tth_step.setMaximum(180) self.tth_step.setMinimum(0.001) self.tth_step.setValue(1) self.tth_step.setDecimals(3) self.setStyleSheet(""" #cell_control_button_widget QPushButton { min-width: 70; } """) def update_lattice_param_step(self, lattice_parameter): opt_step = self.lattice_opts_steps[lattice_parameter] value = round(opt_step.value(), 4) self.lattice_opts[lattice_parameter].setSingleStep(value) # ############################################################################################### # Now comes all the cell tw stuff ################################################################################################ def cell_selection_changed(self): selected = self.get_selected_row() self.cell_selection_edited_signal.emit(selected) def get_selected_row(self): selected = self.cell_tw.selectionModel().selectedRows() try: row = selected[0].row() except IndexError: row = -1 return row def lattice_parameter_edited_callback(self, key): opt = self.lattice_opts[key] new_val = round(opt.value(), 6) param = {key:new_val} self.lattice_parameter_edited_signal.emit(param) def symmetry_edited_callback(self, symmetry): opt = self.symmetry_opts[symmetry.upper()] checked = opt.isChecked() if checked: self.symmetry_edited_signal.emit(symmetry) def set_cell(self, params, params_enabled): for key in params: if key in self.lattice_opts: param = params[key] opt = self.lattice_opts[key] opt.blockSignals(True) opt.setValue(float(param)) opt.blockSignals(False) spgrp = params['spacegroup'] symm = params['symmetry'] self.spgrp_tb.blockSignals(True) self.spgrp_tb.setText(spgrp) self.spgrp_tb.blockSignals(False) sym_opt = self.symmetry_opts[symm.upper()] sym_opt.blockSignals(True) sym_opt.setChecked(True) sym_opt.blockSignals(False) self.set_params_enabled(params_enabled) # this makes the button show, QTreeView quirk when using a QItemDelegate for row in range(0, self.model.rowCount()): self.cell_tw.openPersistentEditor(self.model.index(row, 1)) def set_params_enabled(self, params): for key in params: if key in self.lattice_opts: param_enabled = params[key] self.lattice_opts[key].setEnabled(param_enabled) def select_cell(self, ind): self.cell_tw.selectRow(ind) def del_cell(self, ind): self.cell_tw.blockSignals(True) self.cell_tw.removeRow(ind) self.cell_tw.blockSignals(False) del self.cell_show_cbs[ind] del self.cell_color_btns[ind] if self.cell_tw.rowCount() > ind: self.select_cell(ind) else: self.select_cell(self.cell_tw.rowCount() - 1) def rename_cell(self, ind, name): name_item = self.cell_tw.item(ind, 2) name_item.setText(name) def raise_widget(self): self.show() #self.setWindowState(self.windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive) self.activateWindow() self.raise_()
def __init__(self): super().__init__() self._layout = QtWidgets.QVBoxLayout() self.setWindowTitle('Cut regions control') self.button_widget = QtWidgets.QWidget(self) self.button_widget.setObjectName('rois_control_button_widget') self._button_layout = QtWidgets.QHBoxLayout() self._button_layout.setContentsMargins(0, 0, 0, 0) self._button_layout.setSpacing(15) #self.add_btn = FlatButton('Add') #self.edit_btn = FlatButton('Edit') self.delete_btn = FlatButton('Delete') self.clear_btn = FlatButton('Clear') #self.show_fit_btn = FlatButton('Show') self.edit_btn = FlatButton('Edit') self.filter_btn = FlatButton(f'Filter 2\N{GREEK SMALL LETTER THETA}') self.filter_btn.setCheckable(True) self.filter_btn.setChecked(True) self._button_layout.addWidget(self.edit_btn) self._button_layout.addWidget(self.delete_btn) self._button_layout.addWidget(self.clear_btn) self._button_layout.addWidget(self.filter_btn) self._button_layout.addSpacerItem(HorizontalSpacerItem()) self.button_widget.setLayout(self._button_layout) self._layout.addWidget(self.button_widget) self._body_layout = QtWidgets.QHBoxLayout() self.roi_tw = ListTableWidget(columns=3) self._body_layout.addWidget(self.roi_tw, 10) #### Start peak parameters widget self.baseline_params = QtWidgets.QWidget() self.baseline_params_layout = QtWidgets.QGridLayout() self.baseline_params_V_layout = QtWidgets.QVBoxLayout() self.cut_peak_Wn = DoubleSpinBoxAlignRight() self.cut_peak_Wn.setMinimumWidth(90) self.cut_peak_Wn.setMinimum(0.001) self.cut_peak_Wn.setMaximum(1) self.cut_peak_Wn.setValue(0.2) self.cut_peak_Wn.setDecimals(3) #self.cut_peak_Wn.setSingleStep(0.1) self.cut_peak_iter = DoubleSpinBoxAlignRight() self.cut_peak_iter.setMinimumWidth(90) self.cut_peak_iter.setMinimum(1) self.cut_peak_iter.setMaximum(50) self.cut_peak_iter.setValue(50) self.cut_peak_iter.setDecimals(0) #self.cut_peak_iter.setSingleStep(5) self.cut_peak_Wn_step = DoubleMultiplySpinBoxAlignRight() self.cut_peak_Wn_step.setDecimals(3) self.cut_peak_Wn_step.setMinimumWidth(70) self.cut_peak_iter_step = DoubleMultiplySpinBoxAlignRight() self.cut_peak_iter_step.setDecimals(0) self.cut_peak_iter_step.setMinimumWidth(70) self.cut_peak_Wn_step.valueChanged.connect(partial(self.update_step, \ self.cut_peak_Wn,self.cut_peak_Wn_step)) self.cut_peak_iter_step.valueChanged.connect(partial(self.update_step, \ self.cut_peak_iter,self.cut_peak_iter_step)) self.cut_peak_Wn_step.setValue(0.1) self.cut_peak_iter_step.setValue(5) self.cut_peak_method_spline_choice = QtWidgets.QRadioButton(text="Spline") self.cut_peak_method_baseline_choice = QtWidgets.QRadioButton(text="Baseline") self.cut_peak_method_baseline_choice.setChecked(True) self.cut_peak_label = QtWidgets.QLabel("Peak cutting parameters") self.cut_peak_Wn_label = QtWidgets.QLabel("W<sub>n</sub>") self.cut_peak_iter_label = QtWidgets.QLabel("Iterations") self.cut_peak_method_label = QtWidgets.QLabel("Method") self.baseline_params_layout.addWidget(self.cut_peak_label,0,0,1,2) self.baseline_params_layout.addWidget(self.cut_peak_method_label,1,0) self.baseline_params_layout.addWidget(self.cut_peak_method_baseline_choice,1,1) self.baseline_params_layout.addWidget(self.cut_peak_method_spline_choice,1,2) self.baseline_params_layout.addWidget(self.cut_peak_Wn_label,2,0) self.baseline_params_layout.addWidget(self.cut_peak_iter_label,3,0) self.baseline_params_layout.addWidget(self.cut_peak_Wn,2,1) self.baseline_params_layout.addWidget(self.cut_peak_iter,3,1) self.baseline_params_layout.addWidget(self.cut_peak_Wn_step,2,2) self.baseline_params_layout.addWidget(self.cut_peak_iter_step,3,2) self.baseline_params_apply_all = QtWidgets.QCheckBox('Apply to all') self.baseline_params_apply_all.setChecked(False) #self.baseline_params_layout.addWidget(self.baseline_params_apply_all,3,0,1,2) self.baseline_params.setLayout(self.baseline_params_layout) self.baseline_params_V_layout.addWidget(self.baseline_params) self.baseline_params_V_layout.addSpacerItem(VerticalSpacerItem()) # End peak parameters widget self._body_layout.addLayout(self.baseline_params_V_layout) self._layout.addLayout(self._body_layout) self.button_2_widget = QtWidgets.QWidget(self) self.button_2_widget.setObjectName('rois_control_button_2_widget') self._button_2_layout = QtWidgets.QHBoxLayout() self._button_2_layout.setContentsMargins(0, 0, 0, 0) self._button_2_layout.setSpacing(6) self.apply_btn = FlatButton('Apply') self._button_2_layout.addWidget(self.apply_btn,0) #self._button_2_layout.addWidget(VerticalLine()) self._button_2_layout.addSpacerItem(HorizontalSpacerItem()) #self._button_2_layout.addWidget(VerticalLine()) self.button_2_widget.setLayout(self._button_2_layout) self._layout.addWidget(HorizontalLine()) self._layout.addWidget(self.button_2_widget) self.setLayout(self._layout) self.style_widgets() self.roi_show_cbs = [] self.name_items = [] self.tth_items = [] self.show_parameter_in_pattern = True header_view = QtWidgets.QHeaderView(QtCore.Qt.Horizontal, self.roi_tw) self.roi_tw.setHorizontalHeader(header_view) header_view.setResizeMode(0, QtWidgets.QHeaderView.ResizeToContents) header_view.setResizeMode(1, QtWidgets.QHeaderView.Stretch) self.default_header = [' Cut ', 'E range', f'2\N{GREEK SMALL LETTER THETA}'] self.header = copy.deepcopy(self.default_header) self.roi_tw.setHorizontalHeaderLabels(self.header) #header_view.hide() self.roi_tw.setItemDelegate(NoRectDelegate()) self.create_connections()
class aEDXDRoiWidget(QtWidgets.QWidget): color_btn_clicked = QtCore.pyqtSignal(int, QtWidgets.QWidget) show_cb_state_changed = QtCore.pyqtSignal(dict) name_item_changed = QtCore.pyqtSignal(int, str) widget_closed = QtCore.pyqtSignal() roi_selection_changed_signal = QtCore.pyqtSignal(dict) def __init__(self): super().__init__() self._layout = QtWidgets.QVBoxLayout() self.setWindowTitle('Cut regions control') self.button_widget = QtWidgets.QWidget(self) self.button_widget.setObjectName('rois_control_button_widget') self._button_layout = QtWidgets.QHBoxLayout() self._button_layout.setContentsMargins(0, 0, 0, 0) self._button_layout.setSpacing(15) #self.add_btn = FlatButton('Add') #self.edit_btn = FlatButton('Edit') self.delete_btn = FlatButton('Delete') self.clear_btn = FlatButton('Clear') #self.show_fit_btn = FlatButton('Show') self.edit_btn = FlatButton('Edit') self.filter_btn = FlatButton(f'Filter 2\N{GREEK SMALL LETTER THETA}') self.filter_btn.setCheckable(True) self.filter_btn.setChecked(True) self._button_layout.addWidget(self.edit_btn) self._button_layout.addWidget(self.delete_btn) self._button_layout.addWidget(self.clear_btn) self._button_layout.addWidget(self.filter_btn) self._button_layout.addSpacerItem(HorizontalSpacerItem()) self.button_widget.setLayout(self._button_layout) self._layout.addWidget(self.button_widget) self._body_layout = QtWidgets.QHBoxLayout() self.roi_tw = ListTableWidget(columns=3) self._body_layout.addWidget(self.roi_tw, 10) #### Start peak parameters widget self.baseline_params = QtWidgets.QWidget() self.baseline_params_layout = QtWidgets.QGridLayout() self.baseline_params_V_layout = QtWidgets.QVBoxLayout() self.cut_peak_Wn = DoubleSpinBoxAlignRight() self.cut_peak_Wn.setMinimumWidth(90) self.cut_peak_Wn.setMinimum(0.001) self.cut_peak_Wn.setMaximum(1) self.cut_peak_Wn.setValue(0.2) self.cut_peak_Wn.setDecimals(3) #self.cut_peak_Wn.setSingleStep(0.1) self.cut_peak_iter = DoubleSpinBoxAlignRight() self.cut_peak_iter.setMinimumWidth(90) self.cut_peak_iter.setMinimum(1) self.cut_peak_iter.setMaximum(50) self.cut_peak_iter.setValue(50) self.cut_peak_iter.setDecimals(0) #self.cut_peak_iter.setSingleStep(5) self.cut_peak_Wn_step = DoubleMultiplySpinBoxAlignRight() self.cut_peak_Wn_step.setDecimals(3) self.cut_peak_Wn_step.setMinimumWidth(70) self.cut_peak_iter_step = DoubleMultiplySpinBoxAlignRight() self.cut_peak_iter_step.setDecimals(0) self.cut_peak_iter_step.setMinimumWidth(70) self.cut_peak_Wn_step.valueChanged.connect(partial(self.update_step, \ self.cut_peak_Wn,self.cut_peak_Wn_step)) self.cut_peak_iter_step.valueChanged.connect(partial(self.update_step, \ self.cut_peak_iter,self.cut_peak_iter_step)) self.cut_peak_Wn_step.setValue(0.1) self.cut_peak_iter_step.setValue(5) self.cut_peak_method_spline_choice = QtWidgets.QRadioButton(text="Spline") self.cut_peak_method_baseline_choice = QtWidgets.QRadioButton(text="Baseline") self.cut_peak_method_baseline_choice.setChecked(True) self.cut_peak_label = QtWidgets.QLabel("Peak cutting parameters") self.cut_peak_Wn_label = QtWidgets.QLabel("W<sub>n</sub>") self.cut_peak_iter_label = QtWidgets.QLabel("Iterations") self.cut_peak_method_label = QtWidgets.QLabel("Method") self.baseline_params_layout.addWidget(self.cut_peak_label,0,0,1,2) self.baseline_params_layout.addWidget(self.cut_peak_method_label,1,0) self.baseline_params_layout.addWidget(self.cut_peak_method_baseline_choice,1,1) self.baseline_params_layout.addWidget(self.cut_peak_method_spline_choice,1,2) self.baseline_params_layout.addWidget(self.cut_peak_Wn_label,2,0) self.baseline_params_layout.addWidget(self.cut_peak_iter_label,3,0) self.baseline_params_layout.addWidget(self.cut_peak_Wn,2,1) self.baseline_params_layout.addWidget(self.cut_peak_iter,3,1) self.baseline_params_layout.addWidget(self.cut_peak_Wn_step,2,2) self.baseline_params_layout.addWidget(self.cut_peak_iter_step,3,2) self.baseline_params_apply_all = QtWidgets.QCheckBox('Apply to all') self.baseline_params_apply_all.setChecked(False) #self.baseline_params_layout.addWidget(self.baseline_params_apply_all,3,0,1,2) self.baseline_params.setLayout(self.baseline_params_layout) self.baseline_params_V_layout.addWidget(self.baseline_params) self.baseline_params_V_layout.addSpacerItem(VerticalSpacerItem()) # End peak parameters widget self._body_layout.addLayout(self.baseline_params_V_layout) self._layout.addLayout(self._body_layout) self.button_2_widget = QtWidgets.QWidget(self) self.button_2_widget.setObjectName('rois_control_button_2_widget') self._button_2_layout = QtWidgets.QHBoxLayout() self._button_2_layout.setContentsMargins(0, 0, 0, 0) self._button_2_layout.setSpacing(6) self.apply_btn = FlatButton('Apply') self._button_2_layout.addWidget(self.apply_btn,0) #self._button_2_layout.addWidget(VerticalLine()) self._button_2_layout.addSpacerItem(HorizontalSpacerItem()) #self._button_2_layout.addWidget(VerticalLine()) self.button_2_widget.setLayout(self._button_2_layout) self._layout.addWidget(HorizontalLine()) self._layout.addWidget(self.button_2_widget) self.setLayout(self._layout) self.style_widgets() self.roi_show_cbs = [] self.name_items = [] self.tth_items = [] self.show_parameter_in_pattern = True header_view = QtWidgets.QHeaderView(QtCore.Qt.Horizontal, self.roi_tw) self.roi_tw.setHorizontalHeader(header_view) header_view.setResizeMode(0, QtWidgets.QHeaderView.ResizeToContents) header_view.setResizeMode(1, QtWidgets.QHeaderView.Stretch) self.default_header = [' Cut ', 'E range', f'2\N{GREEK SMALL LETTER THETA}'] self.header = copy.deepcopy(self.default_header) self.roi_tw.setHorizontalHeaderLabels(self.header) #header_view.hide() self.roi_tw.setItemDelegate(NoRectDelegate()) self.create_connections() def update_step(self, control, step_control): value = step_control.value() control.setSingleStep(value) def create_connections(self): self.roi_tw.currentCellChanged.connect(self.roi_selection_changed) def style_widgets(self): self.roi_tw.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding) self.roi_tw.setMinimumWidth(370) self.roi_tw.setMinimumHeight(110) self.setStyleSheet(""" #rois_control_button_widget FlatButton { max-width: 70; min-width: 70; } #rois_control_button_2_widget FlatButton { max-width: 70; min-width: 70; } """) def closeEvent(self, event): # Overrides close event to let controller know that widget was closed by user self.widget_closed.emit() ################################################################################################ # Now comes all the roi tw stuff ################################################################################################ def roi_selection_changed(self, row, **kwargs): tth = None name = None if len(self.tth_items): tth = float(self.tth_items[row].text()) name = self.name_items[row].text() self.roi_selection_changed_signal.emit({'tth':tth,'name' :name}) def set_tw_header_unit(self, unit, unit_=''): if unit_ !='': unit_=' ('+unit_+')' self.header[2] = self.default_header[2] + ', '+unit+unit_ self.roi_tw.setHorizontalHeaderLabels(self.header) def filter_tth(self, fltr_tth): print(fltr_tth) def add_roi(self, use, name,tth): self.roi_tw.blockSignals(True) current_rows = self.roi_tw.rowCount() self.roi_tw.setRowCount(current_rows + 1) show_cb = QtWidgets.QCheckBox() show_cb.setChecked(use) show_cb.stateChanged.connect(partial(self.roi_show_cb_changed, show_cb)) show_cb.setStyleSheet("background-color: transparent") self.roi_tw.setCellWidget(current_rows, 0, show_cb) self.roi_show_cbs.append(show_cb) name_item = QtWidgets.QTableWidgetItem(name) name_item.setText(name) #name_item.setFlags(name_item.flags() & ~QtCore.Qt.ItemIsEditable) name_item.setTextAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter) self.roi_tw.setItem(current_rows, 1, name_item) self.name_items.append(name_item) tth_item = QtWidgets.QTableWidgetItem(tth) tth_item.setText(tth) #tth_item.setFlags(tth_item.flags() & ~QtCore.Qt.ItemIsEditable) tth_item.setTextAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter) self.roi_tw.setItem(current_rows, 2, tth_item) self.tth_items.append(tth_item) self.roi_tw.setColumnWidth(0, 50) self.roi_tw.setRowHeight(current_rows, 25) self.roi_tw.blockSignals(False) def select_roi(self, ind): self.roi_tw.selectRow(ind) def get_selected_roi_row(self): tth = None name = None row = -1 selected = self.roi_tw.selectionModel().selectedRows() if len(selected): row = selected[0].row() if len(self.tth_items): tth = float(self.tth_items[row].text()) name = self.name_items[row].text() return {'tth':tth,'name' :name,'row':row} def get_selected_roi_name(self): selected = self.roi_tw.selectionModel().selectedRows() try: row = selected[0].row() name = self.name_items[row].text() except IndexError: row = -1 name = '' return name def get_selected_roi_tth(self): selected = self.roi_tw.selectionModel().selectedRows() try: row = selected[0].row() tth_str = self.tth_items[row].text() tth = float(tth_str) except IndexError: row = -1 tth = -1 return tth def raise_widget(self): self.show() self.setWindowState(self.windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive) self.activateWindow() self.raise_() def del_roi(self, ind): self.roi_tw.blockSignals(True) self.roi_tw.removeRow(ind) self.roi_tw.blockSignals(False) del self.roi_show_cbs[ind] del self.name_items[ind] del self.tth_items[ind] def rename_roi(self, ind, name): self.roi_tw.blockSignals(True) name_item = self.roi_tw.item(ind, 1) name_item.setText(name) self.roi_tw.blockSignals(False) def roi_show_cb_changed(self, checkbox): checked = checkbox.isChecked() ind = self.roi_show_cbs.index(checkbox) name=self.name_items[ind].text() tth=self.tth_items[ind].text() state = {'tth':tth, 'name':name, 'checked':checked} self.show_cb_state_changed.emit(state)
def __init__(self, parent=None): super(JcpdsEditorWidget, self).__init__(parent) self.setWindowTitle('JCPDS Editor') self._layout = QtWidgets.QVBoxLayout() self._file_layout = QtWidgets.QGridLayout() self._file_layout.addWidget(LabelAlignRight('Filename:'), 0, 0) self._file_layout.addWidget(LabelAlignRight('Comment:'), 1, 0) self.filename_txt = QtWidgets.QLineEdit('') self.comments_txt = QtWidgets.QLineEdit('') self._file_layout.addWidget(self.filename_txt, 0, 1) self._file_layout.addWidget(self.comments_txt, 1, 1) self._layout.addLayout((self._file_layout)) self.lattice_parameters_gb = QtWidgets.QGroupBox('Lattice Parameters') self._lattice_parameters_layout = QtWidgets.QVBoxLayout() self._symmetry_layout = QtWidgets.QHBoxLayout() self._symmetry_layout.addWidget(LabelAlignRight('Symmetry')) self.symmetry_cb = CleanLooksComboBox() self.symmetries = [ 'cubic', 'tetragonal', 'hexagonal', 'trigonal', 'rhombohedral', 'orthorhombic', 'monoclinic', 'triclinic' ] self.symmetry_cb.addItems(self.symmetries) self._symmetry_layout.addWidget(self.symmetry_cb) self._symmetry_layout.addSpacerItem(HorizontalSpacerItem()) self._lattice_parameters_layout.addLayout(self._symmetry_layout) self._parameters_layout = QtWidgets.QGridLayout() self.lattice_a_sb = DoubleSpinBoxAlignRight() self.lattice_a_sb.setSingleStep(0.01) self.lattice_a_sb.setMinimum(0) self.lattice_a_sb.setMaximum(99999) self.lattice_a_sb.setDecimals(4) self.lattice_b_sb = DoubleSpinBoxAlignRight() self.lattice_b_sb.setMinimum(0) self.lattice_b_sb.setMaximum(99999) self.lattice_b_sb.setDecimals(4) self.lattice_b_sb.setSingleStep(0.01) self.lattice_c_sb = DoubleSpinBoxAlignRight() self.lattice_c_sb.setMinimum(0) self.lattice_c_sb.setMaximum(99999) self.lattice_c_sb.setDecimals(4) self.lattice_c_sb.setSingleStep(0.01) self.lattice_length_step_txt = NumberTextField('0.01') self.add_field(self._parameters_layout, self.lattice_a_sb, 'a<sub>0</sub>:', u"Å", 0, 0) self.add_field(self._parameters_layout, self.lattice_b_sb, 'b<sub>0</sub>:', u"Å", 0, 3) self.add_field(self._parameters_layout, self.lattice_c_sb, 'c<sub>0</sub>:', u"Å", 0, 6) self.add_field(self._parameters_layout, self.lattice_length_step_txt, 'st:', u"Å", 0, 9) self.lattice_eos_a_txt = NumberTextField() self.lattice_eos_b_txt = NumberTextField() self.lattice_eos_c_txt = NumberTextField() self.add_field(self._parameters_layout, self.lattice_eos_a_txt, 'a:', u"Å", 1, 0) self.add_field(self._parameters_layout, self.lattice_eos_b_txt, 'b:', u"Å", 1, 3) self.add_field(self._parameters_layout, self.lattice_eos_c_txt, 'c:', u"Å", 1, 6) self.lattice_alpha_sb = DoubleSpinBoxAlignRight() self.lattice_alpha_sb.setMaximum(180) self.lattice_beta_sb = DoubleSpinBoxAlignRight() self.lattice_beta_sb.setMaximum(180) self.lattice_gamma_sb = DoubleSpinBoxAlignRight() self.lattice_gamma_sb.setMaximum(180) self.lattice_angle_step_txt = NumberTextField('1') self.add_field(self._parameters_layout, self.lattice_alpha_sb, u'α:', u"°", 2, 0) self.add_field(self._parameters_layout, self.lattice_beta_sb, u'β:', u"°", 2, 3) self.add_field(self._parameters_layout, self.lattice_gamma_sb, u'γ:', u"°", 2, 6) self.add_field(self._parameters_layout, self.lattice_angle_step_txt, u'st:', u"°", 2, 9) self.lattice_ab_sb = DoubleSpinBoxAlignRight() self.lattice_ab_sb.setDecimals(4) self.lattice_ca_sb = DoubleSpinBoxAlignRight() self.lattice_ca_sb.setDecimals(4) self.lattice_cb_sb = DoubleSpinBoxAlignRight() self.lattice_cb_sb.setDecimals(4) self.lattice_ratio_step_txt = NumberTextField('0.01') self.add_field(self._parameters_layout, self.lattice_ab_sb, 'a/b:', None, 3, 0) self.add_field(self._parameters_layout, self.lattice_ca_sb, 'c/a:', None, 3, 3) self.add_field(self._parameters_layout, self.lattice_cb_sb, 'c/b:', None, 3, 6) self.add_field(self._parameters_layout, self.lattice_ratio_step_txt, 'st:', None, 3, 9) self.lattice_volume_txt = NumberTextField() self.lattice_eos_volume_txt = NumberTextField() self.lattice_eos_molar_volume_txt = NumberTextField() self.lattice_eos_z_txt = NumberTextField() self.add_field(self._parameters_layout, self.lattice_volume_txt, 'V<sub>0</sub>:', u'ų', 4, 0) self.add_field(self._parameters_layout, self.lattice_eos_volume_txt, 'V:', u'ų', 4, 3) self.add_field(self._parameters_layout, self.lattice_eos_molar_volume_txt, 'V<sub>m</sub>:', u'm³/mol', 5, 3) self.add_field(self._parameters_layout, self.lattice_eos_z_txt, 'Z:', u'', 5, 0) self._lattice_parameters_layout.addLayout(self._parameters_layout) self.lattice_parameters_gb.setLayout(self._lattice_parameters_layout) self.eos_widget = EosGroupbox() self.reflections_gb = QtWidgets.QGroupBox('Reflections') self._reflection_layout = QtWidgets.QGridLayout() self.reflection_table_view = QtWidgets.QTableView() self.reflection_table_model = ReflectionTableModel() self.reflection_table_view.setModel(self.reflection_table_model) #self.reflection_table.setColumnCount(8) self.reflections_add_btn = FlatButton('Add') self.reflections_delete_btn = FlatButton('Delete') self.reflections_clear_btn = FlatButton('Clear') self._reflection_layout.addWidget(self.reflection_table_view, 0, 0, 1, 3) self._reflection_layout.addWidget(self.reflections_add_btn, 1, 0) self._reflection_layout.addWidget(self.reflections_delete_btn, 1, 1) self._reflection_layout.addWidget(self.reflections_clear_btn, 1, 2) self.reflections_gb.setLayout(self._reflection_layout) self._body_layout = QtWidgets.QGridLayout() self._body_layout.addWidget(self.eos_widget, 0, 0) self._body_layout.addItem(VerticalSpacerItem(), 1, 0) self._body_layout.addWidget(self.reflections_gb, 0, 1, 2, 1) self._button_layout = QtWidgets.QHBoxLayout() self.save_as_btn = FlatButton('Save As') self.reload_file_btn = FlatButton('Reload File') self._button_layout.addWidget(self.save_as_btn) self._button_layout.addWidget(self.reload_file_btn) self._button_layout.addSpacerItem(HorizontalSpacerItem()) self._layout.addWidget(self.lattice_parameters_gb) self._layout.addLayout(self._body_layout) self._layout.addLayout(self._button_layout) self.setLayout(self._layout) self.style_widgets()
class JcpdsEditorWidget(QtWidgets.QWidget): def __init__(self, parent=None): super(JcpdsEditorWidget, self).__init__(parent) self.setWindowTitle('JCPDS Editor') self._layout = QtWidgets.QVBoxLayout() self._file_layout = QtWidgets.QGridLayout() self._file_layout.addWidget(LabelAlignRight('Filename:'), 0, 0) self._file_layout.addWidget(LabelAlignRight('Comment:'), 1, 0) self.filename_txt = QtWidgets.QLineEdit('') self.comments_txt = QtWidgets.QLineEdit('') self._file_layout.addWidget(self.filename_txt, 0, 1) self._file_layout.addWidget(self.comments_txt, 1, 1) self._layout.addLayout((self._file_layout)) self.lattice_parameters_gb = QtWidgets.QGroupBox('Lattice Parameters') self._lattice_parameters_layout = QtWidgets.QVBoxLayout() self._symmetry_layout = QtWidgets.QHBoxLayout() self._symmetry_layout.addWidget(LabelAlignRight('Symmetry')) self.symmetry_cb = CleanLooksComboBox() self.symmetries = [ 'cubic', 'tetragonal', 'hexagonal', 'trigonal', 'rhombohedral', 'orthorhombic', 'monoclinic', 'triclinic' ] self.symmetry_cb.addItems(self.symmetries) self._symmetry_layout.addWidget(self.symmetry_cb) self._symmetry_layout.addSpacerItem(HorizontalSpacerItem()) self._lattice_parameters_layout.addLayout(self._symmetry_layout) self._parameters_layout = QtWidgets.QGridLayout() self.lattice_a_sb = DoubleSpinBoxAlignRight() self.lattice_a_sb.setSingleStep(0.01) self.lattice_a_sb.setMinimum(0) self.lattice_a_sb.setMaximum(99999) self.lattice_a_sb.setDecimals(4) self.lattice_b_sb = DoubleSpinBoxAlignRight() self.lattice_b_sb.setMinimum(0) self.lattice_b_sb.setMaximum(99999) self.lattice_b_sb.setDecimals(4) self.lattice_b_sb.setSingleStep(0.01) self.lattice_c_sb = DoubleSpinBoxAlignRight() self.lattice_c_sb.setMinimum(0) self.lattice_c_sb.setMaximum(99999) self.lattice_c_sb.setDecimals(4) self.lattice_c_sb.setSingleStep(0.01) self.lattice_length_step_txt = NumberTextField('0.01') self.add_field(self._parameters_layout, self.lattice_a_sb, 'a<sub>0</sub>:', u"Å", 0, 0) self.add_field(self._parameters_layout, self.lattice_b_sb, 'b<sub>0</sub>:', u"Å", 0, 3) self.add_field(self._parameters_layout, self.lattice_c_sb, 'c<sub>0</sub>:', u"Å", 0, 6) self.add_field(self._parameters_layout, self.lattice_length_step_txt, 'st:', u"Å", 0, 9) self.lattice_eos_a_txt = NumberTextField() self.lattice_eos_b_txt = NumberTextField() self.lattice_eos_c_txt = NumberTextField() self.add_field(self._parameters_layout, self.lattice_eos_a_txt, 'a:', u"Å", 1, 0) self.add_field(self._parameters_layout, self.lattice_eos_b_txt, 'b:', u"Å", 1, 3) self.add_field(self._parameters_layout, self.lattice_eos_c_txt, 'c:', u"Å", 1, 6) self.lattice_alpha_sb = DoubleSpinBoxAlignRight() self.lattice_alpha_sb.setMaximum(180) self.lattice_beta_sb = DoubleSpinBoxAlignRight() self.lattice_beta_sb.setMaximum(180) self.lattice_gamma_sb = DoubleSpinBoxAlignRight() self.lattice_gamma_sb.setMaximum(180) self.lattice_angle_step_txt = NumberTextField('1') self.add_field(self._parameters_layout, self.lattice_alpha_sb, u'α:', u"°", 2, 0) self.add_field(self._parameters_layout, self.lattice_beta_sb, u'β:', u"°", 2, 3) self.add_field(self._parameters_layout, self.lattice_gamma_sb, u'γ:', u"°", 2, 6) self.add_field(self._parameters_layout, self.lattice_angle_step_txt, u'st:', u"°", 2, 9) self.lattice_ab_sb = DoubleSpinBoxAlignRight() self.lattice_ab_sb.setDecimals(4) self.lattice_ca_sb = DoubleSpinBoxAlignRight() self.lattice_ca_sb.setDecimals(4) self.lattice_cb_sb = DoubleSpinBoxAlignRight() self.lattice_cb_sb.setDecimals(4) self.lattice_ratio_step_txt = NumberTextField('0.01') self.add_field(self._parameters_layout, self.lattice_ab_sb, 'a/b:', None, 3, 0) self.add_field(self._parameters_layout, self.lattice_ca_sb, 'c/a:', None, 3, 3) self.add_field(self._parameters_layout, self.lattice_cb_sb, 'c/b:', None, 3, 6) self.add_field(self._parameters_layout, self.lattice_ratio_step_txt, 'st:', None, 3, 9) self.lattice_volume_txt = NumberTextField() self.lattice_eos_volume_txt = NumberTextField() self.lattice_eos_molar_volume_txt = NumberTextField() self.lattice_eos_z_txt = NumberTextField() self.add_field(self._parameters_layout, self.lattice_volume_txt, 'V<sub>0</sub>:', u'ų', 4, 0) self.add_field(self._parameters_layout, self.lattice_eos_volume_txt, 'V:', u'ų', 4, 3) self.add_field(self._parameters_layout, self.lattice_eos_molar_volume_txt, 'V<sub>m</sub>:', u'm³/mol', 5, 3) self.add_field(self._parameters_layout, self.lattice_eos_z_txt, 'Z:', u'', 5, 0) self._lattice_parameters_layout.addLayout(self._parameters_layout) self.lattice_parameters_gb.setLayout(self._lattice_parameters_layout) self.eos_widget = EosGroupbox() self.reflections_gb = QtWidgets.QGroupBox('Reflections') self._reflection_layout = QtWidgets.QGridLayout() self.reflection_table_view = QtWidgets.QTableView() self.reflection_table_model = ReflectionTableModel() self.reflection_table_view.setModel(self.reflection_table_model) #self.reflection_table.setColumnCount(8) self.reflections_add_btn = FlatButton('Add') self.reflections_delete_btn = FlatButton('Delete') self.reflections_clear_btn = FlatButton('Clear') self._reflection_layout.addWidget(self.reflection_table_view, 0, 0, 1, 3) self._reflection_layout.addWidget(self.reflections_add_btn, 1, 0) self._reflection_layout.addWidget(self.reflections_delete_btn, 1, 1) self._reflection_layout.addWidget(self.reflections_clear_btn, 1, 2) self.reflections_gb.setLayout(self._reflection_layout) self._body_layout = QtWidgets.QGridLayout() self._body_layout.addWidget(self.eos_widget, 0, 0) self._body_layout.addItem(VerticalSpacerItem(), 1, 0) self._body_layout.addWidget(self.reflections_gb, 0, 1, 2, 1) self._button_layout = QtWidgets.QHBoxLayout() self.save_as_btn = FlatButton('Save As') self.reload_file_btn = FlatButton('Reload File') self._button_layout.addWidget(self.save_as_btn) self._button_layout.addWidget(self.reload_file_btn) self._button_layout.addSpacerItem(HorizontalSpacerItem()) self._layout.addWidget(self.lattice_parameters_gb) self._layout.addLayout(self._body_layout) self._layout.addLayout(self._button_layout) self.setLayout(self._layout) self.style_widgets() def style_widgets(self): self.lattice_angle_step_txt.setMaximumWidth(60) self.lattice_length_step_txt.setMaximumWidth(60) self.lattice_ratio_step_txt.setMaximumWidth(60) self.lattice_eos_z_txt.setMaximumWidth(40) self.reflection_table_view.setShowGrid(False) self.reflection_table_view.setSelectionBehavior( QtWidgets.QAbstractItemView.SelectRows) self.reflection_table_view.setItemDelegate(TextDoubleDelegate()) self.reflection_table_view.horizontalHeader().setResizeMode( QtWidgets.QHeaderView.ResizeToContents) self.eos_widget.setMaximumWidth(250) self.eos_widget.setStyleSheet(""" QLineEdit { max-width: 80; } """) self.reflection_table_view.verticalHeader().setDefaultSectionSize(20) self.reflection_table_view.verticalHeader().setResizeMode( QtWidgets.QHeaderView.Fixed) self.setWindowFlags(QtCore.Qt.Tool) #self.setAttribute(QtCore.Qt.WA_MacAlwaysShowToolWindow) def close(self, *args, **kwargs): super().close() def raise_widget(self): self.show() self.setWindowState(self.windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive) self.activateWindow() self.raise_() def add_field(self, layout, widget, label_str, unit, x, y): layout.addWidget(LabelAlignRight(label_str), x, y) layout.addWidget(widget, x, y + 1) if unit: layout.addWidget(QtWidgets.QLabel(unit), x, y + 2) def show_jcpds(self, jcpds_phase, wavelength=None): self.update_name(jcpds_phase) self.update_lattice_parameters(jcpds_phase) self.update_eos_parameters(jcpds_phase) self.reflection_table_model.update_reflection_data( jcpds_phase.reflections, wavelength) # jcpds V5 def update_eos_parameters(self, jcpds_phase): if 'eos' in jcpds_phase.params and 'z' in jcpds_phase.params: self.eos_widget.setEOSparams(jcpds_phase.params['eos']) self.lattice_eos_z_txt.setText(str(jcpds_phase.params['z'])) def update_name(self, jcpds_phase): self.filename_txt.setText(jcpds_phase.filename) self.comments_txt.setText("/n".join(jcpds_phase.params['comments'])) def update_lattice_parameters(self, jcpds_phase): self.blockAllSignals(True) self.symmetry_cb.setCurrentIndex( self.symmetries.index(jcpds_phase.params['symmetry'].lower())) self.update_spinbox_enable(jcpds_phase.params['symmetry']) if not self.lattice_a_sb.hasFocus(): self.lattice_a_sb.setValue(jcpds_phase.params['a0']) if not self.lattice_b_sb.hasFocus(): self.lattice_b_sb.setValue(jcpds_phase.params['b0']) if not self.lattice_c_sb.hasFocus(): self.lattice_c_sb.setValue(jcpds_phase.params['c0']) self.lattice_eos_a_txt.setText('{0:.4f}'.format( jcpds_phase.params['a'])) self.lattice_eos_b_txt.setText('{0:.4f}'.format( jcpds_phase.params['b'])) self.lattice_eos_c_txt.setText('{0:.4f}'.format( jcpds_phase.params['c'])) self.lattice_eos_volume_txt.setText('{0:.4f}'.format( jcpds_phase.params['v'])) # jcpds V5 if 'vm' in jcpds_phase.params.keys(): vm = jcpds_phase.params['vm'] vm_txt = '{0:.4e}'.format(vm) else: vm_txt = '' self.lattice_eos_molar_volume_txt.setText(vm_txt) try: if not self.lattice_ab_sb.hasFocus(): self.lattice_ab_sb.setValue(jcpds_phase.params['a0'] / float(jcpds_phase.params['b0'])) except ZeroDivisionError: self.lattice_ab_sb.setSpecialValueText('Inf') try: if not self.lattice_ca_sb.hasFocus(): self.lattice_ca_sb.setValue(jcpds_phase.params['c0'] / float(jcpds_phase.params['a0'])) except ZeroDivisionError: self.lattice_ca_sb.setSpecialValueText('Inf') try: if not self.lattice_cb_sb.hasFocus(): self.lattice_cb_sb.setValue(jcpds_phase.params['c0'] / float(jcpds_phase.params['b0'])) except ZeroDivisionError: self.lattice_cb_sb.setSpecialValueText('Inf') self.lattice_volume_txt.setText( str('{0:g}'.format(jcpds_phase.params['v0']))) if not self.lattice_alpha_sb.hasFocus(): self.lattice_alpha_sb.setValue(jcpds_phase.params['alpha0']) if not self.lattice_beta_sb.hasFocus(): self.lattice_beta_sb.setValue(jcpds_phase.params['beta0']) if not self.lattice_gamma_sb.hasFocus(): self.lattice_gamma_sb.setValue(jcpds_phase.params['gamma0']) self.blockAllSignals(False) def blockAllSignals(self, bool=True): self.lattice_a_sb.blockSignals(bool) self.lattice_b_sb.blockSignals(bool) self.lattice_c_sb.blockSignals(bool) self.lattice_alpha_sb.blockSignals(bool) self.lattice_beta_sb.blockSignals(bool) self.lattice_gamma_sb.blockSignals(bool) self.lattice_ab_sb.blockSignals(bool) self.lattice_ca_sb.blockSignals(bool) self.lattice_cb_sb.blockSignals(bool) self.symmetry_cb.blockSignals(bool) def update_spinbox_enable(self, symmetry): if symmetry == 'CUBIC': self.lattice_a_sb.setEnabled(True) self.lattice_b_sb.setEnabled(False) self.lattice_c_sb.setEnabled(False) self.lattice_alpha_sb.setEnabled(False) self.lattice_beta_sb.setEnabled(False) self.lattice_gamma_sb.setEnabled(False) self.lattice_ab_sb.setEnabled(False) self.lattice_ca_sb.setEnabled(False) self.lattice_cb_sb.setEnabled(False) elif symmetry == 'TETRAGONAL': self.lattice_a_sb.setEnabled(True) self.lattice_b_sb.setEnabled(False) self.lattice_c_sb.setEnabled(True) self.lattice_alpha_sb.setEnabled(False) self.lattice_beta_sb.setEnabled(False) self.lattice_gamma_sb.setEnabled(False) self.lattice_ab_sb.setEnabled(False) self.lattice_ca_sb.setEnabled(True) self.lattice_cb_sb.setEnabled(False) elif symmetry == 'ORTHORHOMBIC': self.lattice_a_sb.setEnabled(True) self.lattice_b_sb.setEnabled(True) self.lattice_c_sb.setEnabled(True) self.lattice_alpha_sb.setEnabled(False) self.lattice_beta_sb.setEnabled(False) self.lattice_gamma_sb.setEnabled(False) self.lattice_ab_sb.setEnabled(True) self.lattice_ca_sb.setEnabled(True) self.lattice_cb_sb.setEnabled(True) elif symmetry == 'HEXAGONAL' or symmetry == 'TRIGONAL': self.lattice_a_sb.setEnabled(True) self.lattice_b_sb.setEnabled(False) self.lattice_c_sb.setEnabled(True) self.lattice_alpha_sb.setEnabled(False) self.lattice_beta_sb.setEnabled(False) self.lattice_gamma_sb.setEnabled(False) self.lattice_ab_sb.setEnabled(False) self.lattice_ca_sb.setEnabled(True) self.lattice_cb_sb.setEnabled(False) elif symmetry == 'RHOMBOHEDRAL': self.lattice_a_sb.setEnabled(True) self.lattice_b_sb.setEnabled(False) self.lattice_c_sb.setEnabled(False) self.lattice_alpha_sb.setEnabled(True) self.lattice_beta_sb.setEnabled(False) self.lattice_gamma_sb.setEnabled(False) self.lattice_ab_sb.setEnabled(False) self.lattice_ca_sb.setEnabled(False) self.lattice_cb_sb.setEnabled(False) elif symmetry == 'MONOCLINIC': self.lattice_a_sb.setEnabled(True) self.lattice_b_sb.setEnabled(True) self.lattice_c_sb.setEnabled(True) self.lattice_alpha_sb.setEnabled(False) self.lattice_beta_sb.setEnabled(True) self.lattice_gamma_sb.setEnabled(False) self.lattice_ab_sb.setEnabled(True) self.lattice_ca_sb.setEnabled(True) self.lattice_cb_sb.setEnabled(True) elif symmetry == 'TRICLINIC': self.lattice_a_sb.setEnabled(True) self.lattice_b_sb.setEnabled(True) self.lattice_c_sb.setEnabled(True) self.lattice_alpha_sb.setEnabled(True) self.lattice_beta_sb.setEnabled(True) self.lattice_gamma_sb.setEnabled(True) self.lattice_ab_sb.setEnabled(True) self.lattice_ca_sb.setEnabled(True) self.lattice_cb_sb.setEnabled(True) else: print('Unknown symmetry: {0}.'.format(symmetry)) def get_selected_reflections(self): selected = self.reflection_table_view.selectionModel().selectedRows() try: row = [] for element in selected: row.append(int(element.row())) except IndexError: row = None return row def remove_reflection_from_table(self, ind): self.reflection_table.blockSignals(True) self.reflection_table.removeRow(ind) self.reflection_table.blockSignals(False)
def __init__(self): super().__init__() self.setWindowTitle('New multiangle setup') self._layout = QtWidgets.QVBoxLayout() self._parameter_layout = QtWidgets.QGridLayout() self.q_low_sb = DoubleSpinBoxAlignRight() self.E_low_sb = DoubleSpinBoxAlignRight() self.q_high_sb = DoubleSpinBoxAlignRight() self.E_high_sb = DoubleSpinBoxAlignRight() self.overlap_sb = DoubleSpinBoxAlignRight() self.q_low_sb.setMinimumWidth(100) self.E_low_sb.setMinimumWidth(100) self.q_high_sb.setMinimumWidth(100) self.E_high_sb.setMinimumWidth(100) self.overlap_sb.setMinimumWidth(100) self.q_low_sb.setMaximum(50) self.q_low_sb.setMinimum(0.001) self.q_low_sb.setValue(1) self.E_low_sb.setMaximum(1000) self.E_low_sb.setMinimum(1) self.E_low_sb.setValue(34) self.q_high_sb.setMaximum(50) self.q_high_sb.setMinimum(0.001) self.q_high_sb.setValue(15) self.E_low_sb.setMaximum(1000) self.E_low_sb.setMinimum(1) self.E_high_sb.setValue(68) self.overlap_sb.setMaximum(90) self.overlap_sb.setMinimum(10) self.overlap_sb.setValue(75) self._parameter_layout.addWidget(QtWidgets.QLabel('Low'), 0, 1) self._parameter_layout.addWidget(QtWidgets.QLabel('High'), 0, 2) self._parameter_layout.addWidget(QtWidgets.QLabel('q:'), 1, 0) self._parameter_layout.addWidget(QtWidgets.QLabel('E:'), 2, 0) self._parameter_layout.addWidget(QtWidgets.QLabel('Overlap %:'), 3, 0) self._parameter_layout.addWidget( QtWidgets.QLabel( f'\N{LATIN CAPITAL LETTER A WITH RING ABOVE}\N{SUPERSCRIPT MINUS}\N{SUPERSCRIPT ONE}' ), 1, 3) self._parameter_layout.addWidget(QtWidgets.QLabel('KeV'), 2, 3) self._parameter_layout.addWidget(self.q_low_sb, 1, 1) self._parameter_layout.addWidget(self.q_high_sb, 1, 2) self._parameter_layout.addWidget(self.E_low_sb, 2, 1) self._parameter_layout.addWidget(self.E_high_sb, 2, 2) self._parameter_layout.addWidget(self.overlap_sb, 3, 1) self.apply_btn = FlatButton('Apply') self.apply_btn.setMinimumWidth(75) self.overlap_lbl = QtWidgets.QLabel('') self._parameter_layout.addWidget(self.apply_btn, 4, 1, 1, 1) self._parameter_layout.addWidget(self.overlap_lbl, 3, 2, 1, 1) self._layout.addLayout(self._parameter_layout) self._layout.addSpacerItem(VerticalSpacerItem()) self.setLayout(self._layout) self.apply_btn.clicked.connect(self.compute_2th)
class QCoverageWidget(customWidget): def __init__(self, model): plot_widget_parameters = 'q space coverage', f'2\N{GREEK SMALL LETTER THETA}', 'q' super().__init__(plot_widget_parameters) self.model = model self.setWindowTitle('q space coverage') self.make_E_widgets() self.add_button_widget_item(self.E_widget) self.add_button_widget_spacer() self.model.itemChanged.connect(self.update) def update(self, *karg, **kwarg): if not self.model.block_update: tth = self.model.get_tth() self.plot_tth(tth) def plot_tth(self, tth): self.fig.clear() if len(tth): for i, t in enumerate(tth): color = calculate_color(i) x, y = self.make_plot(t) self.fig.add_line_plot(x, y, color, 2) self.fig.set_plot_label_color(color, i) def make_plot(self, tth): E = [] E.append(self.E_low_sb.value()) E.append(self.E_high_sb.value()) d = [tth_e_to_d(tth, E[0]), tth_e_to_d(tth, E[1])] q = [d_to_q(d[0]), d_to_q(d[1])] x = np.asarray(q) y = np.asarray([tth, tth]) return x, y def make_E_widgets(self): self.E_widget = QtWidgets.QWidget() self._layout = QtWidgets.QVBoxLayout() self._parameter_layout = QtWidgets.QGridLayout() self.E_low_sb = DoubleSpinBoxAlignRight() self.E_high_sb = DoubleSpinBoxAlignRight() self.E_low_sb.setMinimumWidth(100) self.E_high_sb.setMinimumWidth(100) self.E_low_sb.setMaximum(1000) self.E_low_sb.setMinimum(1) self.E_low_sb.setValue(34) self.E_low_sb.setMaximum(1000) self.E_low_sb.setMinimum(1) self.E_high_sb.setValue(68) self._parameter_layout.addWidget(QtWidgets.QLabel('E'), 1, 0) self._parameter_layout.addWidget(QtWidgets.QLabel('Low'), 0, 1) self._parameter_layout.addWidget(QtWidgets.QLabel('High'), 0, 2) self._parameter_layout.addWidget(QtWidgets.QLabel('KeV'), 1, 3) self._parameter_layout.addWidget(self.E_low_sb, 1, 1) self._parameter_layout.addWidget(self.E_high_sb, 1, 2) self._layout.addLayout(self._parameter_layout) self._layout.addSpacerItem(VerticalSpacerItem()) self.E_widget.setLayout(self._layout) self.E_low_sb.valueChanged.connect(self.update) self.E_high_sb.valueChanged.connect(self.update)
class parameterWidget(QtWidgets.QWidget): sequence_changed_signal = QtCore.pyqtSignal(dict) widget_closed = QtCore.pyqtSignal() def __init__(self): super().__init__() self.setWindowTitle('New multiangle setup') self._layout = QtWidgets.QVBoxLayout() self._parameter_layout = QtWidgets.QGridLayout() self.q_low_sb = DoubleSpinBoxAlignRight() self.E_low_sb = DoubleSpinBoxAlignRight() self.q_high_sb = DoubleSpinBoxAlignRight() self.E_high_sb = DoubleSpinBoxAlignRight() self.overlap_sb = DoubleSpinBoxAlignRight() self.q_low_sb.setMinimumWidth(100) self.E_low_sb.setMinimumWidth(100) self.q_high_sb.setMinimumWidth(100) self.E_high_sb.setMinimumWidth(100) self.overlap_sb.setMinimumWidth(100) self.q_low_sb.setMaximum(50) self.q_low_sb.setMinimum(0.001) self.q_low_sb.setValue(1) self.E_low_sb.setMaximum(1000) self.E_low_sb.setMinimum(1) self.E_low_sb.setValue(34) self.q_high_sb.setMaximum(50) self.q_high_sb.setMinimum(0.001) self.q_high_sb.setValue(15) self.E_low_sb.setMaximum(1000) self.E_low_sb.setMinimum(1) self.E_high_sb.setValue(68) self.overlap_sb.setMaximum(90) self.overlap_sb.setMinimum(10) self.overlap_sb.setValue(75) self._parameter_layout.addWidget(QtWidgets.QLabel('Low'), 0, 1) self._parameter_layout.addWidget(QtWidgets.QLabel('High'), 0, 2) self._parameter_layout.addWidget(QtWidgets.QLabel('q:'), 1, 0) self._parameter_layout.addWidget(QtWidgets.QLabel('E:'), 2, 0) self._parameter_layout.addWidget(QtWidgets.QLabel('Overlap %:'), 3, 0) self._parameter_layout.addWidget( QtWidgets.QLabel( f'\N{LATIN CAPITAL LETTER A WITH RING ABOVE}\N{SUPERSCRIPT MINUS}\N{SUPERSCRIPT ONE}' ), 1, 3) self._parameter_layout.addWidget(QtWidgets.QLabel('KeV'), 2, 3) self._parameter_layout.addWidget(self.q_low_sb, 1, 1) self._parameter_layout.addWidget(self.q_high_sb, 1, 2) self._parameter_layout.addWidget(self.E_low_sb, 2, 1) self._parameter_layout.addWidget(self.E_high_sb, 2, 2) self._parameter_layout.addWidget(self.overlap_sb, 3, 1) self.apply_btn = FlatButton('Apply') self.apply_btn.setMinimumWidth(75) self.overlap_lbl = QtWidgets.QLabel('') self._parameter_layout.addWidget(self.apply_btn, 4, 1, 1, 1) self._parameter_layout.addWidget(self.overlap_lbl, 3, 2, 1, 1) self._layout.addLayout(self._parameter_layout) self._layout.addSpacerItem(VerticalSpacerItem()) self.setLayout(self._layout) self.apply_btn.clicked.connect(self.compute_2th) def compute_2th(self): q_low = self.q_low_sb.value() e_low = self.E_low_sb.value() q_high = self.q_high_sb.value() e_high = self.E_high_sb.value() overlap_fract = self.overlap_sb.value() * 0.01 start_time = time.time() n, overlap_fract, seq = optimize_tth(q_low, q_high, e_low, e_high, overlap_fract) timer = time.time() - start_time t = [] for tth in seq: t.append(tth['tth']) d = {} d['n'] = n d['overlap_fract'] = overlap_fract d['seq'] = seq d['tth'] = t low_q = seq[0]['q_low'] high_q = seq[-1]['q_high'] d['q_low'] = low_q d['q_high'] = high_q ''' print(str(t)) print('n = '+ str(int(n))) print('overlap = '+ str(overlap_fract*100)) print('q start = '+ str(low_q)+ '; q end = '+ str(high_q)) print("tth optimized --- %s seconds ---" % (timer)) ''' self.overlap_lbl.setText('n: ' + str(int(n)) + '\nOverlap %: ' + str(round(overlap_fract * 100, 3))) self.sequence_changed_signal.emit(d) def raise_widget(self): self.show() self.setWindowState(self.windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive) self.activateWindow() self.raise_()
class multiangleWidget(QtWidgets.QWidget): widget_closed = QtCore.pyqtSignal() fract_item_changed_signal = QtCore.pyqtSignal(int, float) def __init__(self, multiangle_model): super().__init__() self.multiangle_model = multiangle_model self.parameter_widget = parameterWidget() self._layout = QtWidgets.QVBoxLayout() self.setWindowTitle('Multiangle control') self.button_widget = QtWidgets.QWidget(self) self.button_widget.setObjectName('control_button_widget') self._button_layout = QtWidgets.QHBoxLayout() self._button_layout.setContentsMargins(0, 0, 0, 0) self._button_layout.setSpacing(15) self.new_btn = FlatButton('Setup') self.load_btn = FlatButton('Load') self.save_btn = FlatButton('Save') self.delete_btn = FlatButton('Delete') self.clear_btn = FlatButton('Clear') self.add_btn = FlatButton('Add') self.plot_btn = FlatButton('Plot') self._button_layout.addWidget(self.new_btn) self._button_layout.addWidget(self.load_btn) self._button_layout.addWidget(self.save_btn) self._button_layout.addWidget(self.add_btn) self._button_layout.addWidget(self.delete_btn) self._button_layout.addWidget(self.clear_btn) self._button_layout.addWidget(self.plot_btn) self._button_layout.addSpacerItem(HorizontalSpacerItem()) ''' self._button_layout.addWidget(VerticalLine()) self._button_layout.addWidget(VerticalLine()) self._button_layout.addWidget(self.save_btn) ''' self.button_widget.setLayout(self._button_layout) self._layout.addWidget(self.button_widget) self._body_layout = QtWidgets.QHBoxLayout() self.tth_tv = QtWidgets.QTreeView() self.tth_tv.sortByColumn(0, 0) self.tth_tv.setSortingEnabled(True) self.tth_tv.setModel(self.multiangle_model) self._body_layout.addWidget(self.tth_tv, 10) self.make_beam_parameter_widget() self._body_layout.addWidget(self.beam_parameter_widget) self._layout.addLayout(self._body_layout) self.button_2_widget = QtWidgets.QWidget(self) self.button_2_widget.setObjectName('options_control_button_2_widget') self._button_2_layout = QtWidgets.QHBoxLayout() self._button_2_layout.setContentsMargins(0, 0, 0, 0) self._button_2_layout.setSpacing(15) self.iterations_lbl = QtWidgets.QLabel('Iterations:') self._button_2_layout.addWidget(self.iterations_lbl) self.iterations_control = QtWidgets.QLineEdit() self.iterations_control.setText('1') self._button_2_layout.addWidget(self.iterations_control) self.run_btn = FlatButton('Run') self._button_2_layout.addWidget(self.run_btn, 0) self.stop_btn = FlatButton('Stop') self._button_2_layout.addWidget(self.stop_btn, 0) self.test_btn = FlatButton('Test') self._button_2_layout.addWidget(self.test_btn, 0) self.setup_btn = FlatButton('Setup') self._button_2_layout.addWidget(self.setup_btn, 0) #self._button_2_layout.addWidget(VerticalLine()) self._button_2_layout.addSpacerItem(HorizontalSpacerItem()) #self._button_2_layout.addWidget(VerticalLine()) self.button_2_widget.setLayout(self._button_2_layout) self._layout.addWidget(HorizontalLine()) self._layout.addWidget(self.button_2_widget) self.setLayout(self._layout) self.style_widgets() self.show_parameter_in_pattern = True #self.tth_tv.setItemDelegate(NoRectDelegate()) columns = self.multiangle_model.columnCount() self.tth_tv.resizeColumnToContents(0) header = self.tth_tv.header() for ind in range(columns): header.setSectionResizeMode(ind, QtWidgets.QHeaderView.Stretch) self.make_connections() def make_beam_parameter_widget(self): self.beam_parameter_widget = QtWidgets.QWidget() self._beam_layout = QtWidgets.QVBoxLayout() self._beam_parameter_layout = QtWidgets.QGridLayout() self.tip_size_sb = DoubleSpinBoxAlignRight() self.tip_size_sb.setMinimumWidth(100) self.tip_size_sb.setMaximum(1000) self.tip_size_sb.setMinimum(5e-3) self.tip_size_sb.setValue(0.05) self.tip_size_sb.setDecimals(3) self.tip_size_sb.setSingleStep(0.005) self.tip_distance_sb = DoubleSpinBoxAlignRight() self.tip_distance_sb.setMinimumWidth(100) self.tip_distance_sb.setMaximum(10000) self.tip_distance_sb.setMinimum(1e-3) self.tip_distance_sb.setValue(60) self.det_distance_sb = DoubleSpinBoxAlignRight() self.det_distance_sb.setMinimumWidth(100) self.det_distance_sb.setMaximum(10000) self.det_distance_sb.setMinimum(1e-3) self.det_distance_sb.setValue(600) self._beam_parameter_layout.addWidget( QtWidgets.QLabel('Beam alignment parameters'), 0, 0, 1, 2) self._beam_parameter_layout.addWidget(QtWidgets.QLabel('Tip size'), 1, 0) self._beam_parameter_layout.addWidget(QtWidgets.QLabel('Tip distance'), 2, 0) self._beam_parameter_layout.addWidget( QtWidgets.QLabel('Detector distance'), 3, 0) #self._beam_parameter_layout.addWidget(QtWidgets.QLabel('mm'), 1, 3) self._beam_parameter_layout.addWidget(self.tip_size_sb, 1, 1) self._beam_parameter_layout.addWidget(self.tip_distance_sb, 2, 1) self._beam_parameter_layout.addWidget(self.det_distance_sb, 3, 1) self._beam_parameter_layout.addWidget( QtWidgets.QLabel( 'D0: Collimation depth at the sample center (mm)'), 5, 0, 1, 2) self._beam_parameter_layout.addWidget( QtWidgets.QLabel('D1: Maximum collimation depth (mm)'), 6, 0, 1, 2) self._beam_layout.addLayout(self._beam_parameter_layout) self._beam_layout.addSpacerItem(VerticalSpacerItem()) self.beam_parameter_widget.setLayout(self._beam_layout) def make_connections(self): #self.tth_tv.itemChanged.connect(self.fract_item_changed) self.new_btn.clicked.connect(self.new_callback) def new_callback(self): self.parameter_widget.raise_widget() def style_widgets(self): self.tth_tv.setSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding) self.tth_tv.setMinimumWidth(600) self.tth_tv.setMinimumHeight(110) self.setStyleSheet(""" #control_button_widget FlatButton { min-width: 70; max-width: 70; } #options_control_button_2_widget FlatButton { min-width: 70; max-width: 70; } """) ################################################################################################ # Now comes all the tth tw stuff ################################################################################################ def closeEvent(self, QCloseEvent, *event): # Overrides close event to let controller know that widget was closed by user self.widget_closed.emit() def select_tth(self, ind): self.tth_tv.selectRow(ind) def get_selected_tth_row(self): selected = self.tth_tv.selectionModel().selectedRows() try: row = selected[0].row() except IndexError: row = -1 return row def raise_widget(self): self.show() self.setWindowState(self.windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive) self.activateWindow() self.raise_()