def __init__(self, parent=None): qt.QWidget.__init__(self, parent) self.resize(535, 47) layout = qt.QHBoxLayout(self) layout.setContentsMargins(0, 0, 0, 0) layout.setSpacing(6) self.StatusLabel = qt.QLabel(self) self.StatusLabel.setText("Status:") layout.addWidget(self.StatusLabel) self.StatusLine = qt.QLineEdit(self) self.StatusLine.setText("Ready") self.StatusLine.setReadOnly(1) layout.addWidget(self.StatusLine) self.ChisqLabel = qt.QLabel(self) self.ChisqLabel.setText("Reduced chisq:") layout.addWidget(self.ChisqLabel) self.ChisqLine = qt.QLineEdit(self) self.ChisqLine.setMaximumSize(qt.QSize(16000, 32767)) self.ChisqLine.setText("") self.ChisqLine.setReadOnly(1) layout.addWidget(self.ChisqLine)
def makeDataLocationTab(self): if self.node is None: return self.dataEdits = [] self.sliceEdits = [] dataLayout = qt.QVBoxLayout() dataLayout.setContentsMargins(2, 0, 0, 0) for ia, arrayName in enumerate(self.node.arrays): role = self.node.getProp(arrayName, 'role') if role.startswith('0'): continue arrayLayout = qt.QHBoxLayout() arrayLayout.setContentsMargins(0, 0, 0, 0) lbl = self.node.getProp(arrayName, 'qLabel') unit = self.node.getProp(arrayName, 'qUnit') if unit: lbl += '({0})'.format(unit) dataLabel = qt.QLabel(lbl) dataEdit = qt.QLineEdit() dataEdit.setMinimumWidth(62) dataEdit.setSizePolicy( qt.QSizePolicy.Expanding, qt.QSizePolicy.Fixed) self.dataEdits.append(dataEdit) sliceEdit = qt.QLineEdit() sliceEdit.setSizePolicy( qt.QSizePolicy.Expanding, qt.QSizePolicy.Fixed) self.sliceEdits.append(sliceEdit) sliceEdit.textChanged.connect( partial(self._resizeToContent, sliceEdit)) sliceEdit.hide() arrayLayout.addWidget(dataLabel) arrayLayout.addWidget(dataEdit, 1) arrayLayout.addWidget(sliceEdit, 0) dataLayout.addLayout(arrayLayout) self.registerPropWidget( (dataLabel, dataEdit), dataLabel.text(), # ('dataFormat.dataSource', ia), convertType=int) 'dataFormat.dataSource.int({0})'.format(ia), convertType=int) self.registerPropWidget( sliceEdit, 'slice', 'dataFormat.slices.int({0})'.format(ia), hideEmpty=True) tab = qt.QWidget(self) tab.setLayout(dataLayout) tab.setSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Fixed) self.registerPropGroup(tab, self.dataEdits, 'data location') return tab
def setupUi(self): # form layout for grid scan inputs layout = qt.QFormLayout() self.noChangeBox = qt.QRadioButton() layout.addRow(qt.QLabel("Export flat list of points:"), self.noChangeBox) self.reshapeBox = qt.QRadioButton() self.reshapeBox.setChecked(True) layout.addRow(qt.QLabel("Try reshaping the data:"), self.reshapeBox) self.shapeBox = qt.QLineEdit('auto') layout.addRow(qt.QLabel(" shape:"), self.shapeBox) self.resampleBox = qt.QRadioButton() layout.addRow(qt.QLabel("Resample the data on a grid:"), self.resampleBox) self.oversamplingBox = qt.QSpinBox() self.oversamplingBox.setValue(1) layout.addRow(qt.QLabel(" oversampling relative to typical step size:"), self.oversamplingBox) self.equalBox = qt.QCheckBox() self.equalBox.setChecked(True) layout.addRow(qt.QLabel(" equal horizontal and vertical steps"), self.equalBox) self.formGroupBox = qt.QGroupBox("PyMCA needs data layed out on a regular grid.") self.formGroupBox.setLayout(layout) # ok/cancel buttons buttonBox = qt.QDialogButtonBox(qt.QDialogButtonBox.Ok | qt.QDialogButtonBox.Cancel) buttonBox.accepted.connect(self.accept) buttonBox.rejected.connect(self.reject) # put everything together mainLayout = qt.QVBoxLayout() mainLayout.addWidget(self.formGroupBox) mainLayout.addWidget(buttonBox) self.setLayout(mainLayout) self.setWindowTitle("Export for PyMCA...")
def fillSplitterFiles(self): splitterInner = qt.QWidget(self.splitterFiles) labelFilter = qt.QLabel('file filter') self.editFileFilter = qt.QLineEdit() self.editFileFilter.returnPressed.connect(self.setFileFilter) if hasattr(self.node, 'fileNameFilters'): self.editFileFilter.setText(', '.join(self.node.fileNameFilters)) self.files = FileTreeView(self.node) # self.files.doubleClicked.connect(self.loadFiles) self.files.model().directoryLoaded.connect(self._directoryIsLoaded) self.filesAutoAddCB = qt.QCheckBox("auto append fresh file TODO", self) fileFilterLayout = qt.QHBoxLayout() fileFilterLayout.addWidget(labelFilter) fileFilterLayout.addWidget(self.editFileFilter, 1) layout = qt.QVBoxLayout() layout.setContentsMargins(2, 0, 0, 0) layout.addLayout(fileFilterLayout) layout.addWidget(self.files) layout.addWidget(self.filesAutoAddCB) splitterInner.setLayout(layout) self.columnFormat = ColumnFormatWidget(self.splitterFiles, self.node) self.splitterFiles.setStretchFactor(0, 1) # don't remove self.splitterFiles.setStretchFactor(1, 0)
def __init__(self, merger, **kwargs): super(_MergeProcessDialog, self).__init__(**kwargs) layout = Qt.QVBoxLayout(self) files = merger.summary() output_dir = merger.output_dir label = Qt.QLabel('<html><head/><body><p align="center">' '<span style=" font-size:16pt; font-weight:600;">' 'Merge process</span></p></body></html>') label.setTextFormat(Qt.Qt.RichText) layout.addWidget(label, stretch=0, alignment=Qt.Qt.AlignHCenter) grp_box = GroupBox('Output directory :') grp_box.setLayout(Qt.QVBoxLayout()) outdir_edit = Qt.QLineEdit(output_dir) fm = outdir_edit.fontMetrics() outdir_edit.setMinimumWidth(fm.width(' ' * 100)) grp_box.layout().addWidget(outdir_edit) layout.addWidget(grp_box, stretch=0) grp_box = GroupBox('Files :') grp_box.setLayout(Qt.QVBoxLayout()) tree_widget = Qt.QTreeWidget() tree_widget.setColumnCount(3) tree_widget.setColumnHidden(2, True) # TODO improve master_item = Qt.QTreeWidgetItem([files['master'], '', 'master']) for scan_id in sorted(files.keys()): if scan_id != 'master': master_item.addChild( Qt.QTreeWidgetItem([files[scan_id], '', scan_id])) tree_widget.addTopLevelItem(master_item) tree_widget.setItemWidget(master_item, 1, Qt.QProgressBar()) for i_child in range(master_item.childCount()): tree_widget.setItemWidget(master_item.child(i_child), 1, Qt.QProgressBar()) master_item.setExpanded(True) tree_widget.resizeColumnToContents(0) tree_widget.resizeColumnToContents(1) width = (tree_widget.sizeHintForColumn(0) + tree_widget.sizeHintForColumn(1) + 10) tree_widget.setMinimumWidth(width) layout.addWidget(tree_widget, stretch=1, alignment=Qt.Qt.AlignHCenter) bn_box = Qt.QDialogButtonBox(Qt.QDialogButtonBox.Ok | Qt.QDialogButtonBox.Cancel) bn_box.button(Qt.QDialogButtonBox.Ok).setText('Merge') layout.addWidget(bn_box) bn_box.accepted.connect(self.__onAccept) bn_box.rejected.connect(self.reject) self.__sigMergeDone.connect(self.__mergeDone) self.__tree_widget = tree_widget self.__bn_box = bn_box self.__abort_diag = None self.__merger = merger self.__status = False
def __init__(self, parent, label, unit): qt.QObject.__init__(self, parent=parent) validator = validators.DoubleValidator(self) self.__label = qt.QLabel(parent) self.__label.setText(label) self.__lineEdit = qt.QLineEdit(parent) self.__lineEdit.setValidator(validator) self.__lineEdit.setAlignment(qt.Qt.AlignRight) self.__lineEdit.editingFinished.connect(self.__lineEditChanged) self.__unit = qt.QLabel(parent) self.__unit.setText(unit) self.__constraints = qt.QToolButton(parent) self.__constraints.setAutoRaise(True) self.__constraints.clicked.connect(self.__constraintsClicked) self.__model = None self.__wavelengthInvalidated = False self.__constraintsModel = None global _iconVariableFixed, _iconVariableConstrained, _iconVariableConstrainedOut if _iconVariableFixed is None: _iconVariableFixed = icons.getQIcon("pyfai:gui/icons/variable-fixed") if _iconVariableConstrained is None: _iconVariableConstrained = icons.getQIcon("pyfai:gui/icons/variable-constrained") if _iconVariableConstrainedOut is None: _iconVariableConstrainedOut = icons.getQIcon("pyfai:gui/icons/variable-constrained-out")
def __init__(self, parent=None, n=None): qt.QWidget.__init__(self, parent) # Use the font size as the icon size to avoid to create bigger buttons fontMetric = self.fontMetrics() iconSize = qt.QSize(fontMetric.height(), fontMetric.height()) self.mainLayout = qt.QHBoxLayout(self) self.mainLayout.setContentsMargins(0, 0, 0, 0) self.mainLayout.setSpacing(0) self.firstButton = qt.QPushButton(self) self.firstButton.setIcon(icons.getQIcon("first")) self.firstButton.setIconSize(iconSize) self.previousButton = qt.QPushButton(self) self.previousButton.setIcon(icons.getQIcon("previous")) self.previousButton.setIconSize(iconSize) self._lineEdit = qt.QLineEdit(self) self._label = qt.QLabel(self) self.nextButton = qt.QPushButton(self) self.nextButton.setIcon(icons.getQIcon("next")) self.nextButton.setIconSize(iconSize) self.lastButton = qt.QPushButton(self) self.lastButton.setIcon(icons.getQIcon("last")) self.lastButton.setIconSize(iconSize) self.mainLayout.addWidget(self.firstButton) self.mainLayout.addWidget(self.previousButton) self.mainLayout.addWidget(self._lineEdit) self.mainLayout.addWidget(self._label) self.mainLayout.addWidget(self.nextButton) self.mainLayout.addWidget(self.lastButton) if n is None: first = qt.QSlider().minimum() last = qt.QSlider().maximum() else: first, last = 0, n self._lineEdit.setFixedWidth(self._lineEdit.fontMetrics().width( '%05d' % last)) validator = qt.QIntValidator(first, last, self._lineEdit) self._lineEdit.setValidator(validator) self._lineEdit.setText("%d" % first) self._label.setText("of %d" % last) self._index = first """0-based index""" self.firstButton.clicked.connect(self._firstClicked) self.previousButton.clicked.connect(self._previousClicked) self.nextButton.clicked.connect(self._nextClicked) self.lastButton.clicked.connect(self._lastClicked) self._lineEdit.editingFinished.connect(self._textChangedSlot)
def __init__(self, parent=None): qt.QDialog.__init__(self, parent) self.setWindowTitle("HDF5 group selection") self._tree = Hdf5TreeView(self) self._tree.setSelectionMode(qt.QAbstractItemView.SingleSelection) self._tree.activated.connect(self._onActivation) self._tree.selectionModel().selectionChanged.connect( self._onSelectionChange) self._model = self._tree.findHdf5TreeModel() self._header = self._tree.header() self._header.setSections([ self._model.NAME_COLUMN, self._model.NODE_COLUMN, self._model.LINK_COLUMN ]) _labelSubgroup = qt.QLabel(self) _labelSubgroup.setText("Subgroup name (optional)") self._lineEditSubgroup = qt.QLineEdit(self) self._lineEditSubgroup.setToolTip( "Specify the name of a new subgroup " "to be created in the selected group.") self._lineEditSubgroup.textChanged.connect(self._onSubgroupNameChange) _labelSelectionTitle = qt.QLabel(self) _labelSelectionTitle.setText("Current selection") self._labelSelection = qt.QLabel(self) self._labelSelection.setStyleSheet("color: gray") self._labelSelection.setWordWrap(True) self._labelSelection.setText("Select a group") buttonBox = qt.QDialogButtonBox() self._okButton = buttonBox.addButton(qt.QDialogButtonBox.Ok) self._okButton.setEnabled(False) buttonBox.addButton(qt.QDialogButtonBox.Cancel) buttonBox.accepted.connect(self.accept) buttonBox.rejected.connect(self.reject) vlayout = qt.QVBoxLayout(self) vlayout.addWidget(self._tree) vlayout.addWidget(_labelSubgroup) vlayout.addWidget(self._lineEditSubgroup) vlayout.addWidget(_labelSelectionTitle) vlayout.addWidget(self._labelSelection) vlayout.addWidget(buttonBox) self.setLayout(vlayout) self.setMinimumWidth(400) self._selectedUrl = None
def __init__(self, parent=None): qt.QDialog.__init__(self, parent) self.setWindowTitle("HDF5 item selection") self._tree = Hdf5TreeView(self) self._tree.setSelectionMode(qt.QAbstractItemView.SingleSelection) self._tree.activated.connect(self._onActivation) self._tree.selectionModel().selectionChanged.connect( self._onSelectionChange) self._model = self._tree.findHdf5TreeModel() self._header = self._tree.header() self._newItemWidget = qt.QWidget(self) newItemLayout = qt.QVBoxLayout(self._newItemWidget) self._labelNewItem = qt.QLabel(self._newItemWidget) self._labelNewItem.setText( "Create new item in selected group (optional):") self._lineEditNewItem = qt.QLineEdit(self._newItemWidget) self._lineEditNewItem.setToolTip( "Specify the name of a new item " "to be created in the selected group.") self._lineEditNewItem.textChanged.connect(self._onNewItemNameChange) newItemLayout.addWidget(self._labelNewItem) newItemLayout.addWidget(self._lineEditNewItem) _labelSelectionTitle = qt.QLabel(self) _labelSelectionTitle.setText("Current selection") self._labelSelection = qt.QLabel(self) self._labelSelection.setStyleSheet("color: gray") self._labelSelection.setWordWrap(True) self._labelSelection.setText("Select an item") buttonBox = qt.QDialogButtonBox() self._okButton = buttonBox.addButton(qt.QDialogButtonBox.Ok) self._okButton.setEnabled(False) buttonBox.addButton(qt.QDialogButtonBox.Cancel) buttonBox.accepted.connect(self.accept) buttonBox.rejected.connect(self.reject) vlayout = qt.QVBoxLayout(self) vlayout.addWidget(self._tree) vlayout.addWidget(self._newItemWidget) vlayout.addWidget(_labelSelectionTitle) vlayout.addWidget(self._labelSelection) vlayout.addWidget(buttonBox) self.setLayout(vlayout) self.setMinimumWidth(400) self._selectedUrl = None
def __init__(self, text, parent, value, checked=False): qt.QWidget.__init__(self, parent=parent) self.setLayout(qt.QHBoxLayout()) self._qcb = qt.QCheckBox(parent=self, text=text) self.layout().addWidget(self._qcb) self._qLineEdit = qt.QLineEdit() self.layout().addWidget(self._qLineEdit) self._qcb.toggled.connect(self.updateVis) self.set(value=value, checked=checked) self._qLineEdit.textChanged.connect(self._valueChanged)
def _addItemForStatistic(self, statistic): assert isinstance(statistic, statsmdl.StatBase) assert statistic.name in self._statsHandler.stats self.layout().setSpacing(2) self.layout().setContentsMargins(2, 2, 2, 2) if isinstance(self.layout(), qt.QGridLayout): parent = self else: widget = qt.QWidget(parent=self) parent = widget qLabel = qt.QLabel(statistic.name + ':', parent=parent) qLineEdit = qt.QLineEdit('', parent=parent) qLineEdit.setReadOnly(True) self._addStatsWidgetsToLayout(qLabel=qLabel, qLineEdit=qLineEdit) self._statQlineEdit[statistic.name] = qLineEdit
def makeConversionTab(self): if self.node is None: return self.conversionEdits = [] dataLayout = qt.QVBoxLayout() dataLayout.setContentsMargins(2, 0, 0, 0) for ia, arrayName in enumerate(self.node.arrays): role = self.node.getProp(arrayName, 'role') if role.startswith('0'): continue arrayLayout = qt.QHBoxLayout() arrayLayout.setContentsMargins(0, 0, 0, 0) lbl = self.node.getProp(arrayName, 'qLabel') unit = self.node.getProp(arrayName, 'qUnit') if unit: lbl += '({0})'.format(unit) dataLabel = qt.QLabel(lbl) conversionEdit = qt.QLineEdit() conversionEdit.setMinimumWidth(62) conversionEdit.setSizePolicy( qt.QSizePolicy.Expanding, qt.QSizePolicy.Fixed) self.conversionEdits.append(conversionEdit) arrayLayout.addWidget(dataLabel) arrayLayout.addWidget(conversionEdit, 1) dataLayout.addLayout(arrayLayout) self.registerPropWidget( (dataLabel, conversionEdit), dataLabel.text(), 'dataFormat.conversionFactors.int({0})'.format(ia), emptyMeans=None, convertType=float) tab = qt.QWidget(self) tab.setLayout(dataLayout) tab.setSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Fixed) self.registerPropGroup(tab, self.conversionEdits, 'data units') return tab
def __init__(self, parent=None): super(PrintGeometryWidget, self).__init__(parent) self.mainLayout = qt.QGridLayout(self) self.mainLayout.setContentsMargins(0, 0, 0, 0) self.mainLayout.setSpacing(2) hbox = qt.QWidget() hboxLayout = qt.QHBoxLayout(hbox) hboxLayout.setContentsMargins(0, 0, 0, 0) hboxLayout.setSpacing(2) label = qt.QLabel(self) label.setText("Units") label.setAlignment(qt.Qt.AlignCenter) self._pageButton = qt.QRadioButton() self._pageButton.setText("Page") self._inchButton = qt.QRadioButton() self._inchButton.setText("Inches") self._cmButton = qt.QRadioButton() self._cmButton.setText("Centimeters") self._buttonGroup = qt.QButtonGroup(self) self._buttonGroup.addButton(self._pageButton) self._buttonGroup.addButton(self._inchButton) self._buttonGroup.addButton(self._cmButton) self._buttonGroup.setExclusive(True) # units self.mainLayout.addWidget(label, 0, 0, 1, 4) hboxLayout.addWidget(self._pageButton) hboxLayout.addWidget(self._inchButton) hboxLayout.addWidget(self._cmButton) self.mainLayout.addWidget(hbox, 1, 0, 1, 4) self._pageButton.setChecked(True) # xOffset label = qt.QLabel(self) label.setText("X Offset:") self.mainLayout.addWidget(label, 2, 0) self._xOffset = qt.QLineEdit(self) validator = qt.QDoubleValidator(None) self._xOffset.setValidator(validator) self._xOffset.setText("0.1") self.mainLayout.addWidget(self._xOffset, 2, 1) # yOffset label = qt.QLabel(self) label.setText("Y Offset:") self.mainLayout.addWidget(label, 2, 2) self._yOffset = qt.QLineEdit(self) validator = qt.QDoubleValidator(None) self._yOffset.setValidator(validator) self._yOffset.setText("0.1") self.mainLayout.addWidget(self._yOffset, 2, 3) # width label = qt.QLabel(self) label.setText("Width:") self.mainLayout.addWidget(label, 3, 0) self._width = qt.QLineEdit(self) validator = qt.QDoubleValidator(None) self._width.setValidator(validator) self._width.setText("0.9") self.mainLayout.addWidget(self._width, 3, 1) # height label = qt.QLabel(self) label.setText("Height:") self.mainLayout.addWidget(label, 3, 2) self._height = qt.QLineEdit(self) validator = qt.QDoubleValidator(None) self._height.setValidator(validator) self._height.setText("0.9") self.mainLayout.addWidget(self._height, 3, 3) # aspect ratio self._aspect = qt.QCheckBox(self) self._aspect.setText("Keep screen aspect ratio") self._aspect.setChecked(True) self.mainLayout.addWidget(self._aspect, 4, 1, 1, 2)
def __init__(self, spec_file=None, img_dir=None, spec_version=1, output_dir=None, tmp_dir=None, **kwargs): super(MergeWidget, self).__init__(**kwargs) Qt.QGridLayout(self) # ################ # input QGroupBox # ################ if spec_file is not None: specFile = spec_file else: specFile = '' if img_dir is not None: imgDir = img_dir else: imgDir = '' if spec_version is not None: specVersion = spec_version else: specVersion = self._defaultVersion if output_dir is not None: outputDir = output_dir else: outputDir = '' # parameters self.__input = { 'specfile': specFile, 'imgdir': imgDir, 'version': specVersion, 'padding': None, 'offset': None } self.__output = {'outdir': outputDir, 'prefix': ''} inputGbx = GroupBox("Input") layout = Qt.QGridLayout(inputGbx) self.layout().addWidget(inputGbx, 0, 0, Qt.Qt.AlignTop) first_col = 0 file_bn_col = 4 last_col = file_bn_col + 1 spec_row = 0 img_path_row = 1 version_row = 2 apply_bn_row = 3 # spec file input specFileChooser = FileChooser(fileMode=Qt.QFileDialog.ExistingFile, noLabel=True) specFileChooser.lineEdit.setText(specFile) specFileChooser.sigSelectionChanged.connect(self.__slotSpecFileChanged) layout.addWidget(Qt.QLabel('Spec file :'), spec_row, 0) layout.addWidget(specFileChooser, spec_row, 1) # image folder input imgDirChooser = FileChooser(fileMode=Qt.QFileDialog.Directory, noLabel=True) imgDirChooser.lineEdit.setText(imgDir) imgDirChooser.sigSelectionChanged.connect(self.__slotImgDirChanged) layout.addWidget(Qt.QLabel('Img dir. :'), img_path_row, 0) layout.addWidget(imgDirChooser, img_path_row, 1) # version selection optionLayout = Qt.QHBoxLayout() optionLayout.addStretch(1) lab = Qt.QLabel('Version :') self.__versionCBx = versionCBx = Qt.QComboBox() for version in range(len(self._versions)): versionCBx.addItem(str(version)) versionCBx.addItem('') optionLayout.addWidget(lab, Qt.Qt.AlignLeft) optionLayout.addWidget(versionCBx, Qt.Qt.AlignLeft) # filename padding for the nextNr counter self.__padSpinBox = padSpinBox = Qt.QSpinBox() optionLayout.addWidget(_vLine()) optionLayout.addWidget(Qt.QLabel('nextNr padding:')) optionLayout.addWidget(padSpinBox, Qt.Qt.AlignLeft) padSpinBox.valueChanged[int].connect(self.__slotPaddingValueChanged) # filename offset for the nextNr counter self.__nextNrSpinBox = nextNrSpinBox = Qt.QSpinBox() nextNrSpinBox.setMinimum(-100) nextNrSpinBox.setMaximum(100) optionLayout.addWidget(_vLine()) optionLayout.addWidget(Qt.QLabel('nextNr offset:')) optionLayout.addWidget(nextNrSpinBox, Qt.Qt.AlignLeft) nextNrSpinBox.valueChanged[int].connect(self.__slotNextNrValueChanged) optionLayout.addStretch(100) layout.addLayout(optionLayout, version_row, 0, 1, layout.columnCount(), Qt.Qt.AlignLeft) # last row : apply button self.__parseBn = parseBn = FixedSizePushButon('Parse file') parseBn.clicked.connect(self.__slotParseBnClicked, Qt.Qt.QueuedConnection) layout.addWidget(parseBn, apply_bn_row, 0, 1, last_col - first_col, Qt.Qt.AlignHCenter) # ################ # scans + edf QGroupBox # ################ self.__scansGbx = scansGbx = GroupBox("Spec + EDF") grpLayout = Qt.QHBoxLayout(scansGbx) self.layout().addWidget(scansGbx, 1, 0, Qt.Qt.AlignLeft | Qt.Qt.AlignTop) # =========== # valid scans # =========== scanLayout = Qt.QGridLayout() grpLayout.addLayout(scanLayout) hLayout = Qt.QHBoxLayout() label = Qt.QLabel('<span style=" font-weight:600; color:#00916a;">' 'Matched scans</span>') label.setTextFormat(Qt.Qt.RichText) editScansBn = FixedSizePushButon('Edit') editScansBn.clicked.connect(self.__slotEditScansClicked) hLayout.addWidget(label) hLayout.addWidget(editScansBn) scanLayout.addLayout(hLayout, 0, 0, 1, 2) label = Qt.QLabel('Total :') self.__totalScansEdit = totalScansEdit = Qt.QLineEdit('0') totalScansEdit.setReadOnly(True) fm = totalScansEdit.fontMetrics() width = (fm.boundingRect('0123456').width() + fm.boundingRect('00').width()) totalScansEdit.setMaximumWidth(width) totalScansEdit.setAlignment(Qt.Qt.AlignRight) scanLayout.addWidget(label, 1, 0, Qt.Qt.AlignLeft) scanLayout.addWidget(totalScansEdit, 1, 1, Qt.Qt.AlignLeft) # ==== label = Qt.QLabel('Selected :') self.__selectedScansEdit = selectedScansEdit = Qt.QLineEdit('0') selectedScansEdit.setReadOnly(True) fm = selectedScansEdit.fontMetrics() width = (fm.boundingRect('0123456').width() + fm.boundingRect('00').width()) selectedScansEdit.setMaximumWidth(width) selectedScansEdit.setAlignment(Qt.Qt.AlignRight) scanLayout.addWidget(label, 2, 0, Qt.Qt.AlignLeft) scanLayout.addWidget(selectedScansEdit, 2, 1, Qt.Qt.AlignLeft) # === grpLayout.addWidget(_vLine()) # =========== # "other" scans # =========== scanLayout = Qt.QGridLayout() grpLayout.addLayout(scanLayout) hLayout = Qt.QHBoxLayout() label = Qt.QLabel('<span style=" font-weight:600; color:#ff6600;">' 'Other scans</span>') otherScansBn = FixedSizePushButon('View') otherScansBn.clicked.connect(self.__slotOtherScansClicked) hLayout.addWidget(label) hLayout.addWidget(otherScansBn) scanLayout.addLayout(hLayout, 0, 0, 1, 2) label = Qt.QLabel('No match :') self.__noMatchScansEdit = noMatchScansEdit = Qt.QLineEdit('0') noMatchScansEdit.setReadOnly(True) fm = noMatchScansEdit.fontMetrics() width = (fm.boundingRect('0123456').width() + fm.boundingRect('00').width()) noMatchScansEdit.setMaximumWidth(width) noMatchScansEdit.setAlignment(Qt.Qt.AlignRight) scanLayout.addWidget(label, 1, 0, Qt.Qt.AlignLeft) scanLayout.addWidget(noMatchScansEdit, 1, 1, Qt.Qt.AlignLeft) # ==== label = Qt.QLabel('No img info :') self.__noImgInfoEdit = noImgInfoEdit = Qt.QLineEdit('0') noImgInfoEdit.setReadOnly(True) fm = noImgInfoEdit.fontMetrics() width = (fm.boundingRect('0123456').width() + fm.boundingRect('00').width()) noImgInfoEdit.setMaximumWidth(width) noImgInfoEdit.setAlignment(Qt.Qt.AlignRight) scanLayout.addWidget(label, 2, 0, Qt.Qt.AlignLeft) scanLayout.addWidget(noImgInfoEdit, 2, 1, Qt.Qt.AlignLeft) # === grpLayout.addWidget(_vLine()) # ################ # parameters # ################ self.__acqParamsGbx = acqParamsGbx = GroupBox("Acq. Parameters") grpLayout = Qt.QVBoxLayout(acqParamsGbx) self.__acqParamWid = acqParamWid = AcqParamsWidget() self.layout().addWidget(acqParamsGbx, 2, 0, Qt.Qt.AlignLeft | Qt.Qt.AlignTop) grpLayout.addWidget(acqParamWid) # ################ # output options # ################ self.__outputGbx = outputGbx = GroupBox("Output") layout = Qt.QGridLayout(outputGbx) self.layout().addWidget(outputGbx, 3, 0, Qt.Qt.AlignTop) # =========== # master # =========== lab = Qt.QLabel('Prefix :') self.__prefixEdit = prefixEdit = StyledLineEdit(nChar=20) prefixEdit.textChanged.connect(self.__slotPrefixChanged) hLayout = Qt.QHBoxLayout() layout.addLayout(hLayout, 0, 1, Qt.Qt.AlignLeft) resetPrefixBn = Qt.QToolButton() icon = Qt.qApp.style().standardIcon(Qt.QStyle.SP_BrowserReload) resetPrefixBn.setIcon(icon) resetPrefixBn.clicked.connect(self.__slotResetPrefixClicked) layout.addWidget(lab, 0, 0, Qt.Qt.AlignLeft) sp = prefixEdit.sizePolicy() sp.setHorizontalPolicy(Qt.QSizePolicy.Maximum) prefixEdit.setSizePolicy(sp) hLayout.addWidget(prefixEdit, Qt.Qt.AlignLeft) hLayout.addWidget(resetPrefixBn, Qt.Qt.AlignLeft) # =========== # output folder # =========== outDirChooser = FileChooser(fileMode=Qt.QFileDialog.Directory, noLabel=True) outDirChooser.lineEdit.setText(outputDir) outDirChooser.sigSelectionChanged.connect(self.__slotOutDirChanged) layout.addWidget(Qt.QLabel('Output directory :'), 1, 0) layout.addWidget(outDirChooser, 1, 1) # ################ # merge button # ################ self.__mergeBn = mergeBn = Qt.QPushButton('Merge') cancelBn = Qt.QPushButton('Cancel') hLayout = Qt.QHBoxLayout() self.layout().addLayout(hLayout, 4, 0, 1, 1, Qt.Qt.AlignHCenter | Qt.Qt.AlignTop) hLayout.addWidget(mergeBn) hLayout.addWidget(cancelBn) mergeBn.clicked.connect(self.__slotMergeBnClicked) cancelBn.clicked.connect(self.reject) # ################# # setting initial state # ################# # scansGbx.setEnabled(False) # acqParamsGbx.setEnabled(False) # outputGbx.setEnabled(False) # mergeBn.setEnabled(False) parseBn.setEnabled(False) self.__merger = None self.__parser = None self.info_wid = None if tmp_dir is None: tmp_dir, delete_tmp, q_tmp_dir = _create_tmp_dir() else: delete_tmp = False q_tmp_dir = None self.__tmp_root = tmp_dir self.__delete_tmp_root = delete_tmp self.__q_tmp_dir = q_tmp_dir tmp_dir = os.path.join(self.__tmp_root, 'xsocs_merge') if not os.path.exists(tmp_dir): os.makedirs(tmp_dir) self.__tmp_dir_merge = tmp_dir print('Using temporary folder : {0}.'.format(tmp_dir)) self.__widgetIsSetup = False self.__xsocs_h5 = None versionCBx.setCurrentIndex(spec_version) self.__slotVersionChanged(spec_version) versionCBx.currentIndexChanged[int].connect(self.__slotVersionChanged) self.__resetState() self.__sigParsed.connect(self.__slotParsed, Qt.Qt.QueuedConnection)
def populateOptions(self): grid = self.ui.optionsGrid # remove all old options for i in reversed(range(grid.count())): grid.itemAt(i).widget().setParent(None) # add new ones opts = self._current_subclass_opts() self.formWidgets = {} i = 0 for name, opt in opts.items(): # special: the options scanNr and fileName (or path) have their input # widgets at the top of the GUI for convenience, while dataSource is # handled per tab. if name in ('dataSource', 'scanNr', 'path', 'fileName'): continue grid.addWidget(qt.QLabel(name), i, 0) grid.addWidget(qt.QLabel(opt['doc']), i, 2) if opt['type'] == int: w = qt.QSpinBox() w.setMaximum(9999) w.setValue(opt['value']) elif opt['type'] == float: w = qt.QDoubleSpinBox() w.setValue(opt['value']) elif opt['type'] == bool: w = qt.QCheckBox() w.setChecked(opt['value']) elif opt['type'] in (list, tuple): w = qt.QLineEdit() w.setText(str(opt['value'])) w.evaluate_me = True elif type(opt['type']) in (list, tuple): w = qt.QComboBox() defaultindex = 0 for j, item in enumerate(opt['type']): w.addItem(item) if item == opt['value']: defaultindex = j w.setCurrentIndex(defaultindex) else: w = qt.QLineEdit() w.setText(opt['value']) w.evaluate_me = False grid.addWidget(w, i, 1) # save a dict of the options widgets, to parse when loading self.formWidgets[name] = w i += 1 # add a vertical spacer on the last line to make the table more compact grid.setRowStretch(i, 1) # special treatment oldtext = str(self.ui.filenameBox.text()) if 'path' in opts.keys() and oldtext.startswith('<'): self.ui.filenameBox.setText('<data path>') elif 'fileName' in opts.keys() and oldtext.startswith('<'): self.ui.filenameBox.setText('<input file>') self.ui.filenameBox.setDisabled(not ( 'path' in opts.keys() or 'fileName' in opts.keys())) self.ui.browseButton.setDisabled(not ( 'path' in opts.keys() or 'fileName' in opts.keys())) self.ui.scanNumberBox.setDisabled('scanNr' not in opts.keys()) # per-tab dataSource option boxes = { self.ui.dataSource2dBox: 2, self.ui.dataSource1dBox: 1, self.ui.dataSource0dBox: 0 } subclass_ = str(self.ui.scanClassBox.currentText()) try: subclass = getattr(nmutils.core, subclass_) except AttributeError: subclass = None for box, dim in boxes.items(): box.clear() if subclass is not None: for name in opts['dataSource']['type']: if hasattr(subclass, 'sourceDims' ) and not subclass.sourceDims[name] == dim: continue box.addItem(name) box.addItem('')
def getEditor(self, parent, option, index): editor = qt.QLineEdit(parent) editor.setValidator(qt.QDoubleValidator(editor)) return editor
def _initThresholdGroupBox(self): """Init thresholding widgets""" layout = qt.QVBoxLayout() # Thresholing self.belowThresholdAction = qt.QAction( icons.getQIcon('plot-roi-below'), 'Mask below threshold', None) self.belowThresholdAction.setToolTip( 'Mask image where values are below given threshold') self.belowThresholdAction.setCheckable(True) self.belowThresholdAction.triggered[bool].connect( self._belowThresholdActionTriggered) self.betweenThresholdAction = qt.QAction( icons.getQIcon('plot-roi-between'), 'Mask within range', None) self.betweenThresholdAction.setToolTip( 'Mask image where values are within given range') self.betweenThresholdAction.setCheckable(True) self.betweenThresholdAction.triggered[bool].connect( self._betweenThresholdActionTriggered) self.aboveThresholdAction = qt.QAction( icons.getQIcon('plot-roi-above'), 'Mask above threshold', None) self.aboveThresholdAction.setToolTip( 'Mask image where values are above given threshold') self.aboveThresholdAction.setCheckable(True) self.aboveThresholdAction.triggered[bool].connect( self._aboveThresholdActionTriggered) self.thresholdActionGroup = qt.QActionGroup(self) self.thresholdActionGroup.setExclusive(False) self.thresholdActionGroup.addAction(self.belowThresholdAction) self.thresholdActionGroup.addAction(self.betweenThresholdAction) self.thresholdActionGroup.addAction(self.aboveThresholdAction) self.thresholdActionGroup.triggered.connect( self._thresholdActionGroupTriggered) self.loadColormapRangeAction = qt.QAction( icons.getQIcon('view-refresh'), 'Set min-max from colormap', None) self.loadColormapRangeAction.setToolTip( 'Set min and max values from current colormap range') self.loadColormapRangeAction.setCheckable(False) self.loadColormapRangeAction.triggered.connect( self._loadRangeFromColormapTriggered) widgets = [] for action in self.thresholdActionGroup.actions(): btn = qt.QToolButton() btn.setDefaultAction(action) widgets.append(btn) spacer = qt.QWidget() spacer.setSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Preferred) widgets.append(spacer) loadColormapRangeBtn = qt.QToolButton() loadColormapRangeBtn.setDefaultAction(self.loadColormapRangeAction) widgets.append(loadColormapRangeBtn) container = self._hboxWidget(*widgets, stretch=False) layout.addWidget(container) form = qt.QFormLayout() self.minLineEdit = qt.QLineEdit() self.minLineEdit.setText('0') self.minLineEdit.setValidator(qt.QDoubleValidator(self)) self.minLineEdit.setEnabled(False) form.addRow('Min:', self.minLineEdit) self.maxLineEdit = qt.QLineEdit() self.maxLineEdit.setText('0') self.maxLineEdit.setValidator(qt.QDoubleValidator(self)) self.maxLineEdit.setEnabled(False) form.addRow('Max:', self.maxLineEdit) self.applyMaskBtn = qt.QPushButton('Apply mask') self.applyMaskBtn.clicked.connect(self._maskBtnClicked) self.applyMaskBtn.setEnabled(False) form.addRow(self.applyMaskBtn) self.maskNanBtn = qt.QPushButton('Mask not finite values') self.maskNanBtn.setToolTip('Mask Not a Number and infinite values') self.maskNanBtn.clicked.connect(self._maskNotFiniteBtnClicked) form.addRow(self.maskNanBtn) thresholdWidget = qt.QWidget() thresholdWidget.setLayout(form) layout.addWidget(thresholdWidget) layout.addStretch(1) self.thresholdGroup = qt.QGroupBox('Threshold') self.thresholdGroup.setLayout(layout) return self.thresholdGroup
def create_widgets(self): self.main_panel = qt.QWidget(self) self.main_panel.setLayout(qt.QVBoxLayout()) self.setCentralWidget(self.main_panel) self.flyStartE = qt.QDoubleSpinBox(self) self.flyStartE.setAlignment(qt.Qt.AlignCenter) self.flyStartE.setMinimumSize(qt.QSize(130, 30)) self.flyStartE.setMaximumSize(qt.QSize(130, 30)) self.flyStartE.setButtonSymbols(qt.QAbstractSpinBox.NoButtons) self.flyStartE.setDecimals(2) self.flyStartE.setMinimum(-9999999.99) self.flyStartE.setMaximum(9999999.99) self.flyStartE.setSingleStep(0.0) self.flyStartE.setProperty("value", -200.0) self.flyStopE = qt.QDoubleSpinBox(self) self.flyStopE.setAlignment(qt.Qt.AlignCenter) self.flyStopE.setMinimumSize(qt.QSize(130, 30)) self.flyStopE.setMaximumSize(qt.QSize(130, 30)) self.flyStopE.setButtonSymbols(qt.QAbstractSpinBox.NoButtons) self.flyStopE.setDecimals(2) self.flyStopE.setMinimum(-9999999.99) self.flyStopE.setMaximum(9999999.99) self.flyStopE.setSingleStep(0.01) self.flyStopE.setProperty("value", 600) self.flyResolutionE = qt.QDoubleSpinBox(self) self.flyResolutionE.setAlignment(qt.Qt.AlignCenter) self.flyResolutionE.setMinimumSize(qt.QSize(130, 30)) self.flyResolutionE.setMaximumSize(qt.QSize(130, 30)) self.flyResolutionE.setButtonSymbols(qt.QAbstractSpinBox.NoButtons) self.flyResolutionE.setDecimals(2) self.flyResolutionE.setMinimum(0.01) self.flyResolutionE.setMaximum(9999999.99) self.flyResolutionE.setSingleStep(0.01) self.flyResolutionE.setProperty("value", 0.4) self.flyScanTime = qt.QDoubleSpinBox(self) self.flyScanTime.setAlignment(qt.Qt.AlignCenter) self.flyScanTime.setMinimumSize(qt.QSize(130, 30)) self.flyScanTime.setMaximumSize(qt.QSize(130, 30)) self.flyScanTime.setButtonSymbols(qt.QAbstractSpinBox.NoButtons) self.flyScanTime.setDecimals(2) self.flyScanTime.setMinimum(0.01) self.flyScanTime.setMaximum(9999999.99) self.flyScanTime.setSingleStep(0.01) self.flyScanTime.setProperty("value", 180) self.flyMotorSpeed = qt.QLineEdit(self) self.flyMotorSpeed.setMinimumSize(qt.QSize(130, 30)) self.flyMotorSpeed.setMaximumSize(qt.QSize(130, 30)) self.flyMotorSpeed.setAlignment(qt.Qt.AlignCenter) self.flyMotorSpeed.setStyleSheet("background : transparent") self.flyMotorSpeed.setReadOnly(True) self.flyMotorSpeed.setText("0.0214") self.flyEncoderStepSize = qt.QLineEdit(self) self.flyEncoderStepSize.setMinimumSize(qt.QSize(130, 30)) self.flyEncoderStepSize.setMaximumSize(qt.QSize(130, 30)) self.flyEncoderStepSize.setAlignment(qt.Qt.AlignCenter) self.flyEncoderStepSize.setStyleSheet("background : transparent") self.flyEncoderStepSize.setReadOnly(True) self.flyEncoderStepSize.setText("26") self.flyNumOfPoints = qt.QLineEdit(self) self.flyNumOfPoints.setMinimumSize(qt.QSize(130, 30)) self.flyNumOfPoints.setMaximumSize(qt.QSize(130, 30)) self.flyNumOfPoints.setAlignment(qt.Qt.AlignCenter) self.flyNumOfPoints.setStyleSheet("background : transparent") self.flyNumOfPoints.setReadOnly(True) self.flyNumOfPoints.setText("1973") self.flyCoolTime = qt.QDoubleSpinBox(self) self.flyCoolTime.setAlignment(qt.Qt.AlignCenter) self.flyCoolTime.setMinimumSize(qt.QSize(130, 30)) self.flyCoolTime.setMaximumSize(qt.QSize(130, 30)) self.flyCoolTime.setButtonSymbols(qt.QAbstractSpinBox.NoButtons) self.flyCoolTime.setDecimals(0) self.flyCoolTime.setMinimum(1) self.flyCoolTime.setMaximum(9999999.99) self.flyCoolTime.setSingleStep(1) self.flyCoolTime.setProperty("value", 30)
def __init__(self, parent=None): super(SearchPage, self).__init__(parent) layout = qt.QVBoxLayout(self) self.manualFwhmGB = qt.QGroupBox("Define FWHM manually", self) self.manualFwhmGB.setCheckable(True) self.manualFwhmGB.setToolTip( "If disabled, the FWHM parameter used for peak search is " + "estimated based on the highest peak in the data") layout.addWidget(self.manualFwhmGB) # ------------ GroupBox fwhm-------------------------- layout2 = qt.QHBoxLayout(self.manualFwhmGB) self.manualFwhmGB.setLayout(layout2) label = qt.QLabel("Fwhm Points", self.manualFwhmGB) layout2.addWidget(label) self.fwhmPointsSpin = qt.QSpinBox(self.manualFwhmGB) self.fwhmPointsSpin.setRange(0, 999999) self.fwhmPointsSpin.setToolTip( "Typical peak fwhm (number of data points)") layout2.addWidget(self.fwhmPointsSpin) # ---------------------------------------------------- self.manualScalingGB = qt.QGroupBox("Define scaling manually", self) self.manualScalingGB.setCheckable(True) self.manualScalingGB.setToolTip( "If disabled, the Y scaling used for peak search is " + "estimated automatically") layout.addWidget(self.manualScalingGB) # ------------ GroupBox scaling----------------------- layout3 = qt.QHBoxLayout(self.manualScalingGB) self.manualScalingGB.setLayout(layout3) label = qt.QLabel("Y Scaling", self.manualScalingGB) layout3.addWidget(label) self.yScalingEntry = qt.QLineEdit(self.manualScalingGB) self.yScalingEntry.setToolTip( "Data values will be multiplied by this value prior to peak" + " search") self.yScalingEntry.setValidator(qt.QDoubleValidator(self)) layout3.addWidget(self.yScalingEntry) # ---------------------------------------------------- # ------------------- grid layout -------------------- containerWidget = qt.QWidget(self) layout4 = qt.QHBoxLayout(containerWidget) containerWidget.setLayout(layout4) label = qt.QLabel("Sensitivity", containerWidget) layout4.addWidget(label) self.sensitivityEntry = qt.QLineEdit(containerWidget) self.sensitivityEntry.setToolTip( "Peak search sensitivity threshold, expressed as a multiple " + "of the standard deviation of the noise.\nMinimum value is 1 " + "(to be detected, peak must be higher than the estimated noise)") sensivalidator = qt.QDoubleValidator(self) sensivalidator.setBottom(1.0) self.sensitivityEntry.setValidator(sensivalidator) layout4.addWidget(self.sensitivityEntry) # ---------------------------------------------------- layout.addWidget(containerWidget) self.forcePeakPresenceCB = qt.QCheckBox("Force peak presence", self) self.forcePeakPresenceCB.setToolTip( "If peak search algorithm is unsuccessful, place one peak " + "at the maximum of the curve") layout.addWidget(self.forcePeakPresenceCB) layout.addStretch() self.setDefault()
def __init__(self, parent=None): qt.QWidget.__init__(self, parent) self.mainLayout = qt.QGridLayout(self) self.mainLayout.setColumnStretch(1, 1) # Algorithm choice --------------------------------------------------- self.algorithmComboLabel = qt.QLabel(self) self.algorithmComboLabel.setText("Background algorithm") self.algorithmCombo = qt.QComboBox(self) self.algorithmCombo.addItem("Strip") self.algorithmCombo.addItem("Snip") self.algorithmCombo.activated[int].connect( self._algorithmComboActivated) # Strip parameters --------------------------------------------------- self.stripWidthLabel = qt.QLabel(self) self.stripWidthLabel.setText("Strip Width") self.stripWidthSpin = qt.QSpinBox(self) self.stripWidthSpin.setMaximum(100) self.stripWidthSpin.setMinimum(1) self.stripWidthSpin.valueChanged[int].connect(self._emitSignal) self.stripIterLabel = qt.QLabel(self) self.stripIterLabel.setText("Strip Iterations") self.stripIterValue = qt.QLineEdit(self) validator = qt.QIntValidator(self.stripIterValue) self.stripIterValue._v = validator self.stripIterValue.setText("0") self.stripIterValue.editingFinished[()].connect(self._emitSignal) self.stripIterValue.setToolTip( "Number of iterations for strip algorithm.\n" + "If greater than 999, an 2nd pass of strip filter is " + "applied to remove artifacts created by first pass.") # Snip parameters ---------------------------------------------------- self.snipWidthLabel = qt.QLabel(self) self.snipWidthLabel.setText("Snip Width") self.snipWidthSpin = qt.QSpinBox(self) self.snipWidthSpin.setMaximum(300) self.snipWidthSpin.setMinimum(0) self.snipWidthSpin.valueChanged[int].connect(self._emitSignal) # Smoothing parameters ----------------------------------------------- self.smoothingFlagCheck = qt.QCheckBox(self) self.smoothingFlagCheck.setText("Smoothing Width (Savitsky-Golay)") self.smoothingFlagCheck.toggled.connect(self._smoothingToggled) self.smoothingSpin = qt.QSpinBox(self) self.smoothingSpin.setMinimum(3) #self.smoothingSpin.setMaximum(40) self.smoothingSpin.setSingleStep(2) self.smoothingSpin.valueChanged[int].connect(self._emitSignal) # Anchors ------------------------------------------------------------ self.anchorsGroup = qt.QWidget(self) anchorsLayout = qt.QHBoxLayout(self.anchorsGroup) anchorsLayout.setSpacing(2) anchorsLayout.setContentsMargins(0, 0, 0, 0) self.anchorsFlagCheck = qt.QCheckBox(self.anchorsGroup) self.anchorsFlagCheck.setText("Use anchors") self.anchorsFlagCheck.setToolTip( "Define X coordinates of points that must remain fixed") self.anchorsFlagCheck.stateChanged[int].connect( self._anchorsToggled) anchorsLayout.addWidget(self.anchorsFlagCheck) maxnchannel = 16384 * 4 # Fixme ? self.anchorsList = [] num_anchors = 4 for i in range(num_anchors): anchorSpin = qt.QSpinBox(self.anchorsGroup) anchorSpin.setMinimum(0) anchorSpin.setMaximum(maxnchannel) anchorSpin.valueChanged[int].connect(self._emitSignal) anchorsLayout.addWidget(anchorSpin) self.anchorsList.append(anchorSpin) # Layout ------------------------------------------------------------ self.mainLayout.addWidget(self.algorithmComboLabel, 0, 0) self.mainLayout.addWidget(self.algorithmCombo, 0, 2) self.mainLayout.addWidget(self.stripWidthLabel, 1, 0) self.mainLayout.addWidget(self.stripWidthSpin, 1, 2) self.mainLayout.addWidget(self.stripIterLabel, 2, 0) self.mainLayout.addWidget(self.stripIterValue, 2, 2) self.mainLayout.addWidget(self.snipWidthLabel, 3, 0) self.mainLayout.addWidget(self.snipWidthSpin, 3, 2) self.mainLayout.addWidget(self.smoothingFlagCheck, 4, 0) self.mainLayout.addWidget(self.smoothingSpin, 4, 2) self.mainLayout.addWidget(self.anchorsGroup, 5, 0, 1, 4) # Initialize interface ----------------------------------------------- self._setAlgorithm("strip") self.smoothingFlagCheck.setChecked(False) self._smoothingToggled(is_checked=False) self.anchorsFlagCheck.setChecked(False) self._anchorsToggled(is_checked=False)
def __init__(self, parent=None, title="Subtract strip background prior to estimation"): super(BackgroundPage, self).__init__(parent) self.setTitle(title) self.setCheckable(True) self.setToolTip( "The strip algorithm strips away peaks to compute the " + "background signal.\nAt each iteration, a sample is compared " + "to the average of the two samples at a given distance in both" + " directions,\n and if its value is higher than the average," "it is replaced by the average.") layout = qt.QGridLayout(self) self.setLayout(layout) for i, label_text in enumerate([ "Strip width (in samples)", "Number of iterations", "Strip threshold factor" ]): label = qt.QLabel(label_text) layout.addWidget(label, i, 0) self.stripWidthSpin = qt.QSpinBox(self) self.stripWidthSpin.setToolTip( "Width, in number of samples, of the strip operator") self.stripWidthSpin.setRange(1, 999999) layout.addWidget(self.stripWidthSpin, 0, 1) self.numIterationsSpin = qt.QSpinBox(self) self.numIterationsSpin.setToolTip( "Number of iterations of the strip algorithm") self.numIterationsSpin.setRange(1, 999999) layout.addWidget(self.numIterationsSpin, 1, 1) self.thresholdFactorEntry = qt.QLineEdit(self) self.thresholdFactorEntry.setToolTip( "Factor used by the strip algorithm to decide whether a sample" + "value should be stripped.\nThe value must be higher than the " + "average of the 2 samples at +- w times this factor.\n") self.thresholdFactorEntry.setValidator(qt.QDoubleValidator(self)) layout.addWidget(self.thresholdFactorEntry, 2, 1) self.smoothStripGB = qt.QGroupBox("Apply smoothing prior to strip", self) self.smoothStripGB.setCheckable(True) self.smoothStripGB.setToolTip( "Apply a smoothing before subtracting strip background" + " in fit and estimate processes") smoothlayout = qt.QHBoxLayout(self.smoothStripGB) label = qt.QLabel("Smoothing width (Savitsky-Golay)") smoothlayout.addWidget(label) self.smoothingWidthSpin = qt.QSpinBox(self) self.smoothingWidthSpin.setToolTip( "Width parameter for Savitsky-Golay smoothing (number of samples, must be odd)" ) self.smoothingWidthSpin.setRange(3, 101) self.smoothingWidthSpin.setSingleStep(2) smoothlayout.addWidget(self.smoothingWidthSpin) layout.addWidget(self.smoothStripGB, 3, 0, 1, 2) layout.setRowStretch(4, 1) self.setDefault()