def __init__(self, parent=None, nregions=10, limits=[0.0, 1000.]): qt.QGroupBox.__init__(self, parent) self.setTitle('Spectral Regions') self.mainLayout = qt.QGridLayout(self) self.mainLayout.setMargin(0) self.mainLayout.setSpacing(2) if nregions % 2: nregions += 1 self.nRegions = nregions self.regionList = [] self.__limits = [limits[0], limits[1]] # Nice hint -> What about: # self.regionList.extend([[limits[0], limits[1]] * self.nRegions) # instead of this loop with the useless i? for i in range(self.nRegions): self.regionList.append([limits[0], limits[1]]) self.nRegionsLabel = qt.QLabel(self) self.nRegionsLabel.setText("Number of Regions:") self.nRegionsSpinBox = qt.QSpinBox(self) self.nRegionsSpinBox.setMinimum(0) self.nRegionsSpinBox.setValue(0) self.nRegionsSpinBox.setMaximum(self.nRegions) self.mainLayout.addWidget(self.nRegionsLabel, 0, 0) self.mainLayout.addWidget(self.nRegionsSpinBox, 0, 1) self.connect(self.nRegionsSpinBox, qt.SIGNAL("valueChanged(int)"), self._regionsChanged) self.currentRegionLabel = qt.QLabel(self) self.currentRegionLabel.setText("Current Region:") self.currentRegionSpinBox = qt.QSpinBox(self) self.currentRegionSpinBox.setMinimum(1) self.currentRegionSpinBox.setValue(1) self.currentRegionSpinBox.setMaximum(1) self.mainLayout.addWidget(self.currentRegionLabel, 0, 2) self.mainLayout.addWidget(self.currentRegionSpinBox, 0, 3) self.connect(self.currentRegionSpinBox, qt.SIGNAL("valueChanged(int)"), self._currentRegionChanged) label = qt.QLabel(self) label.setText("From:") self.fromLine = qt.QLineEdit(self) self.fromLine.setText("%f" % limits[0]) self.fromLine._v = qt.QDoubleValidator(self.fromLine) self.fromLine.setValidator(self.fromLine._v) self.mainLayout.addWidget(label, 0, 4) self.mainLayout.addWidget(self.fromLine, 0, 5) self.connect(self.fromLine, qt.SIGNAL("editingFinished()"), self._editingSlot) label = qt.QLabel(self) label.setText("To:") self.toLine = qt.QLineEdit(self) self.toLine.setText("%f" % limits[1]) self.toLine._v = qt.QDoubleValidator(self.toLine) self.toLine.setValidator(self.toLine._v) self.mainLayout.addWidget(label, 0, 6) self.mainLayout.addWidget(self.toLine, 0, 7) self.connect(self.toLine, qt.SIGNAL("editingFinished()"), self._editingSlot) self._regionsChanged(0)
def __init__(self, parent=None): qt.QGroupBox.__init__(self, parent) self.setTitle("Function Definition") self.mainLayout = qt.QGridLayout(self) self.mainLayout.setMargin(2) self.mainLayout.setSpacing(2) row = 0 #actual fit function self.fitFunctionCheckBox = qt.QCheckBox(self) self.fitFunctionCheckBox.setText("Fit Function to be used") self.fitFunctionCombo = qt.QComboBox(self) self.fitFunctionCombo.addItem(str("None")) self.connect(self.fitFunctionCombo, qt.SIGNAL("activated(int)"), self._fitFunctionComboActivated) self.fitFunctionSetupButton = qt.QPushButton(self) self.fitFunctionSetupButton.setText('SETUP') self.fitFunctionSetupButton.setAutoDefault(False) self.fitFunctionSetupButton.hide() self.mainLayout.addWidget(self.fitFunctionCheckBox, row, 0) self.mainLayout.addWidget(qt.HorizontalSpacer(self), row, 1) self.mainLayout.addWidget(self.fitFunctionSetupButton, row, 2) self.mainLayout.addWidget(self.fitFunctionCombo, row, 3) row += 1 #background self.backgroundCheckBox = qt.QCheckBox(self) self.backgroundCheckBox.setText("Background function") self.backgroundCombo = qt.QComboBox(self) self.backgroundCombo.addItem(str("None")) self.connect(self.backgroundCombo, qt.SIGNAL("activated(int)"), self._backgroundComboActivated) self.backgroundSetupButton = qt.QPushButton(self) self.backgroundSetupButton.setText('SETUP') self.backgroundSetupButton.setAutoDefault(False) self.backgroundSetupButton.hide() self.mainLayout.addWidget(self.backgroundCheckBox, row, 0) self.mainLayout.addWidget(qt.HorizontalSpacer(self), row, 1) self.mainLayout.addWidget(self.backgroundSetupButton, row, 2) self.mainLayout.addWidget(self.backgroundCombo, row, 3) row += 1 #stripping self.stripCheckBox = qt.QCheckBox(self) self.stripCheckBox.setText( "Non-analytical (or estimation) background algorithm") self.stripCombo = qt.QComboBox(self) self.stripCombo.addItem(str("Strip")) self.stripCombo.addItem(str("SNIP")) self.stripSetupButton = qt.QPushButton(self) self.stripSetupButton.setText('SETUP') self.stripSetupButton.setAutoDefault(False) self.connect(self.stripCombo, qt.SIGNAL("activated(int)"), self._stripComboActivated) self.mainLayout.addWidget(self.stripCheckBox, row, 0) self.mainLayout.addWidget(qt.HorizontalSpacer(self), row, 1) self.mainLayout.addWidget(self.stripSetupButton, row, 2) self.mainLayout.addWidget(self.stripCombo, row, 3) row += 1 self.snipWidthLabel = qt.QLabel(self) self.snipWidthLabel.setText(str("SNIP Background Width")) self.snipWidthSpin = qt.QSpinBox(self) self.snipWidthSpin.setMinimum(1) self.snipWidthSpin.setMaximum(300) self.snipWidthSpin.setValue(10) self.mainLayout.addWidget(self.snipWidthLabel, row, 0) self.mainLayout.addWidget(self.snipWidthSpin, row, 3) row += 1 self.stripWidthLabel = qt.QLabel(self) self.stripWidthLabel.setText(str("Strip Background Width")) self.stripWidthSpin = qt.QSpinBox(self) self.stripWidthSpin.setMinimum(1) self.stripWidthSpin.setMaximum(100) self.stripWidthSpin.setValue(4) self.mainLayout.addWidget(self.stripWidthLabel, row, 0) self.mainLayout.addWidget(self.stripWidthSpin, row, 3) row += 1 self.stripIterLabel = qt.QLabel(self) self.stripIterLabel.setText(str("Strip Background Iterations")) self.stripIterSpin = qt.QSpinBox(self) self.stripIterSpin.setMinimum(0) self.stripIterSpin.setMaximum(100000) self.stripIterSpin.setValue(5000) self.mainLayout.addWidget(self.stripIterLabel, row, 0) self.mainLayout.addWidget(self.stripIterSpin, row, 3) row += 1 self.stripFilterLabel = qt.QLabel(self) text = str("Strip Background Smoothing Width (Savitsky-Golay)") self.stripFilterLabel.setText(text) self.stripFilterSpin = qt.QSpinBox(self) self.stripFilterSpin.setMinimum(0) self.stripFilterSpin.setMaximum(40) self.stripFilterSpin.setSingleStep(2) self.mainLayout.addWidget(self.stripFilterLabel, row, 0) self.mainLayout.addWidget(self.stripFilterSpin, row, 3) row += 1 #anchors self.anchorsContainer = qt.QWidget(self) anchorsContainerLayout = qt.QHBoxLayout(self.anchorsContainer) anchorsContainerLayout.setMargin(2) anchorsContainerLayout.setSpacing(2) self.stripAnchorsCheckBox = qt.QCheckBox(self.anchorsContainer) self.stripAnchorsCheckBox.setText(str("Strip Background use Anchors")) anchorsContainerLayout.addWidget(self.stripAnchorsCheckBox) self.stripAnchorsList = [] for i in range(4): anchor = qt.QLineEdit(self.anchorsContainer) anchor._v = qt.QDoubleValidator(anchor) anchor.setValidator(anchor._v) anchor.setText("0.0") anchorsContainerLayout.addWidget(anchor) self.stripAnchorsList.append(anchor) self.mainLayout.addWidget(self.anchorsContainer, row, 0, 1, 4) row += 1 #signals self.connect(self.fitFunctionSetupButton, qt.SIGNAL('clicked()'), self.setupFitFunction) self.connect(self.backgroundSetupButton, qt.SIGNAL('clicked()'), self.setupBackground) self.connect(self.stripSetupButton, qt.SIGNAL('clicked()'), self.setupStrip)
def __init__(self, parent=None): qt.QGroupBox.__init__(self, parent) self.setTitle("Fit Control") self.mainLayout = qt.QGridLayout(self) self.mainLayout.setMargin(2) self.mainLayout.setSpacing(2) row = 0 #linear fit self.fitAlgorithmLabel = qt.QLabel(self) self.fitAlgorithmLabel.setText("Fit algorithm") self.fitAlgorithmCombo = qt.QComboBox(self) self.fitAlgorithmCombo.addItem(str("Levenberg-Marquardt")) self.fitAlgorithmCombo.addItem(str("Linear Fit")) self.mainLayout.addWidget(self.fitAlgorithmLabel, row, 0) self.mainLayout.addWidget(qt.HorizontalSpacer(self), row, 1) self.mainLayout.addWidget(self.fitAlgorithmCombo, row, 3) row += 1 #weighting self.weightLabel = qt.QLabel(self) self.weightLabel.setText("Statistical weighting of data") self.weightCombo = qt.QComboBox(self) self.weightCombo.addItem(str("NO Weight")) self.weightCombo.addItem(str("Poisson (1/Y)")) self.mainLayout.addWidget(self.weightLabel, row, 0) self.mainLayout.addWidget(qt.HorizontalSpacer(self), row, 1) self.mainLayout.addWidget(self.weightCombo, row, 3) row += 1 #function estimation policy self.functionEstimationLabel = qt.QLabel(self) self.functionEstimationLabel.setText("Function estimation policy") self.functionEstimationCombo = qt.QComboBox(self) self.functionEstimationCombo.addItem(str("Use configuration")) self.functionEstimationCombo.addItem(str("Estimate once")) self.functionEstimationCombo.addItem(str("Estimate always")) self.functionEstimationCombo.setCurrentIndex(2) self.mainLayout.addWidget(self.functionEstimationLabel, row, 0) self.mainLayout.addWidget(self.functionEstimationCombo, row, 3) row += 1 #background estimation policy self.backgroundEstimationLabel = qt.QLabel(self) text = "Background estimation policy" self.backgroundEstimationLabel.setText(text) self.backgroundEstimationCombo = qt.QComboBox(self) self.backgroundEstimationCombo.addItem(str("Use configuration")) self.backgroundEstimationCombo.addItem(str("Estimate once")) self.backgroundEstimationCombo.addItem(str("Estimate always")) self.backgroundEstimationCombo.setCurrentIndex(2) self.mainLayout.addWidget(self.backgroundEstimationLabel, row, 0) self.mainLayout.addWidget(self.backgroundEstimationCombo, row, 3) row += 1 #number of iterations self.iterLabel = qt.QLabel(self) self.iterLabel.setText(str("Maximum number of fit iterations")) self.iterSpin = qt.QSpinBox(self) self.iterSpin.setMinimum(1) self.iterSpin.setMaximum(10000) self.iterSpin.setValue(10) self.mainLayout.addWidget(self.iterLabel, row, 0) self.mainLayout.addWidget(qt.HorizontalSpacer(self), row, 1) self.mainLayout.addWidget(self.iterSpin, row, 3) row += 1 #chi square handling self.chi2Label = qt.QLabel(self) self.chi2Label.setText(str("Minimum chi^2 difference (%)")) if 0: self.chi2Value = qt.QLineEdit(self) self.chi2Value._v = qt.QDoubleValidator(self.chi2Value) self.chi2Value.setValidator(self.chi2Value._v) self.chi2Value.setText(str("0.001")) else: self.chi2Value = qt.QDoubleSpinBox(self) self.chi2Value.setDecimals(4) self.chi2Value.setMinimum(0.0001) self.chi2Value.setMaximum(100.) self.chi2Value.setSingleStep(0.0001) self.chi2Value.setValue(0.001) self.mainLayout.addWidget(self.chi2Label, row, 0) self.mainLayout.addWidget(qt.HorizontalSpacer(self), row, 1) self.mainLayout.addWidget(self.chi2Value, row, 3) row += 1 #fitting region self.regionTopLine = qt.QFrame(self) self.regionTopLine.setFrameShape(qt.QFrame.HLine) self.regionTopLine.setFrameShadow(qt.QFrame.Sunken) self.regionTopLine.setFrameShape(qt.QFrame.HLine) self.regionCheckBox = qt.QCheckBox(self) self.regionCheckBox.setText(str("Limit fitting region to :")) self.firstLabel = qt.QLabel(self) firstLabel_font = qt.QFont(self.firstLabel.font()) firstLabel_font.setItalic(1) self.firstLabel.setFont(firstLabel_font) self.firstLabel.setText(str("First X Value ")) self.firstLabel.setAlignment(qt.Qt.AlignVCenter | qt.Qt.AlignRight) self.firstValue = qt.QLineEdit(self) self.firstValue._v = qt.QDoubleValidator(self.firstValue) self.firstValue.setValidator(self.firstValue._v) self.firstValue.setText(str("0.")) self.lastLabel = qt.QLabel(self) lastLabel_font = qt.QFont(self.lastLabel.font()) lastLabel_font.setItalic(1) self.lastLabel.setFont(lastLabel_font) self.lastLabel.setText(str("Last X Value ")) self.lastLabel.setAlignment(qt.Qt.AlignVCenter | qt.Qt.AlignRight) self.lastValue = qt.QLineEdit(self) self.lastValue._v = qt.QDoubleValidator(self.lastValue) self.lastValue.setValidator(self.lastValue._v) self.lastValue.setText(str("1000.")) self.regionBottomLine = qt.QFrame(self) self.regionBottomLine.setFrameShape(qt.QFrame.HLine) self.regionBottomLine.setFrameShadow(qt.QFrame.Sunken) self.regionBottomLine.setFrameShape(qt.QFrame.HLine) self.mainLayout.addWidget(self.regionTopLine, row, 0, 1, 4) row += 1 self.mainLayout.addWidget(self.regionCheckBox, row, 0) self.mainLayout.addWidget(self.firstLabel, row, 1) self.mainLayout.addWidget(self.firstValue, row, 3) row += 1 self.mainLayout.addWidget(self.lastLabel, row, 1) self.mainLayout.addWidget(self.lastValue, row, 3) row += 1 self.mainLayout.addWidget(self.regionBottomLine, row, 0, 1, 4) row += 1
def build(self, spacing=2): layout = qt.QHBoxLayout(self) layout.setMargin(0) layout.setSpacing(spacing) #column 0 c0 = qt.QWidget(self) c0.layout = qt.QVBoxLayout(c0) c0.layout.setMargin(0) c0.layout.setSpacing(spacing) c0l0 = qt.QLabel(c0) c0l0.setText("Flux (photons/s)") c0l1 = qt.QLabel(c0) c0l1.setText("Active Area (cm2)") c0.layout.addWidget(c0l0) c0.layout.addWidget(c0l1) #column 1 c1 = qt.QWidget(self) c1.layout = qt.QVBoxLayout(c1) c1.layout.setMargin(0) c1.layout.setSpacing(spacing) self.flux = MyQLineEdit(c1) self.flux.setValidator(qt.QDoubleValidator(self.flux)) self.area = MyQLineEdit(c1) self.area.setValidator(qt.QDoubleValidator(self.area)) c1.layout.addWidget(self.flux) c1.layout.addWidget(self.area) #column 2 c2 = qt.QWidget(self) c2.layout = qt.QVBoxLayout(c2) c2.layout.setMargin(0) c2.layout.setSpacing(spacing) c2l0 = qt.QLabel(c2) c2l0.setText("x time(seconds)") c2l1 = qt.QLabel(c2) c2l1.setText("distance (cm)") c2.layout.addWidget(c2l0) c2.layout.addWidget(c2l1) #column 3 c3 = qt.QWidget(self) c3.layout = qt.QVBoxLayout(c3) c3.layout.setMargin(0) c3.layout.setSpacing(spacing) self.time = MyQLineEdit(c3) self.time.setValidator(qt.QDoubleValidator(self.time)) self.distance = MyQLineEdit(c3) self.distance.setValidator(qt.QDoubleValidator(self.distance)) c3.layout.addWidget(self.time) c3.layout.addWidget(self.distance) layout.addWidget(c0) layout.addWidget(c1) layout.addWidget(c2) layout.addWidget(c3)
def buildToolMode(self, comments="True", height=3): layout = qt.QVBoxLayout(self) layout.setMargin(0) layout.setSpacing(0) self.__comments = comments grid = qt.QWidget(self) gridLayout = qt.QGridLayout(grid) gridLayout.setMargin(11) gridLayout.setSpacing(4) numberLabel = qt.QLabel(grid) numberLabel.setText("Number of Compounds:") numberLabel.setAlignment(qt.Qt.AlignVCenter) self.__numberSpin = qt.QSpinBox(grid) self.__numberSpin.setMinimum(1) self.__numberSpin.setMaximum(30) self.__numberSpin.setValue(1) tableContainer = qt.QWidget(self) tableContainerLayout = qt.QVBoxLayout(tableContainer) tableContainerLayout.setMargin(0) tableContainerLayout.setSpacing(0) self.__tableContainer = tableContainer self.__table = qt.QTableWidget(tableContainer) self.__table.setRowCount(1) self.__table.setColumnCount(2) tableContainerLayout.addWidget(self.__table) self.__table.setMinimumHeight( (height) * self.__table.horizontalHeader().sizeHint().height()) self.__table.setMaximumHeight( (height) * self.__table.horizontalHeader().sizeHint().height()) self.__table.setMinimumWidth(1 * self.__table.sizeHint().width()) self.__table.setMaximumWidth(1 * self.__table.sizeHint().width()) labels = ["Material", "Mass Fraction"] for i in range(len(labels)): item = self.__table.horizontalHeaderItem(i) if item is None: item = qt.QTableWidgetItem(labels[i], qt.QTableWidgetItem.Type) self.__table.setHorizontalHeaderItem(i, item) self.__table.setSelectionMode(qt.QTableWidget.NoSelection) densityLabel = qt.QLabel(grid) densityLabel.setText("Density (g/cm3):") densityLabel.setAlignment(qt.Qt.AlignVCenter) self.__densityLine = qt.QLineEdit(grid) self.__densityLine.setText("1.0") validator = qt.QDoubleValidator(self.__densityLine) self.__densityLine.setValidator(validator) self.__densityLine.setReadOnly(False) thicknessLabel = qt.QLabel(grid) thicknessLabel.setText("Thickness (cm):") thicknessLabel.setAlignment(qt.Qt.AlignVCenter) self.__thicknessLine = qt.QLineEdit(grid) self.__thicknessLine.setText("0.1") validator = qt.QDoubleValidator(self.__thicknessLine) self.__thicknessLine.setValidator(validator) self.__thicknessLine.setReadOnly(False) self.__transmissionButton = qt.QPushButton(grid) self.__transmissionButton.setText('Material Transmission') self.__massAttButton = qt.QPushButton(grid) self.__massAttButton.setText('Mass Att. Coefficients') self.__transmissionButton.setAutoDefault(False) self.__massAttButton.setAutoDefault(False) nameHBox = qt.QWidget(grid) nameHBoxLayout = qt.QHBoxLayout(nameHBox) nameHBoxLayout.setMargin(0) nameHBoxLayout.setSpacing(0) nameLabel = qt.QLabel(nameHBox) nameLabel.setText("Name:") nameLabel.setAlignment(qt.Qt.AlignVCenter) self.__nameLine = qt.QLineEdit(nameHBox) self.__nameLine.setReadOnly(False) if self.__toolMode: toolTip = "Type your material name and press the ENTER key.\n" toolTip += "Fitting materials cannot be defined or redefined here.\n" toolTip += "Use the material editor of the advanced fit for it.\n" self.__nameLine.setToolTip(toolTip) nameHBoxLayout.addWidget(nameLabel) nameHBoxLayout.addWidget(self.__nameLine) gridLayout.addWidget(nameHBox, 0, 0, 1, 2) gridLayout.addWidget(numberLabel, 1, 0) gridLayout.addWidget(self.__numberSpin, 1, 1) gridLayout.addWidget(self.__tableContainer, 2, 0, 1, 2) gridLayout.addWidget(densityLabel, 3, 0) gridLayout.addWidget(self.__densityLine, 3, 1) gridLayout.addWidget(thicknessLabel, 4, 0) gridLayout.addWidget(self.__thicknessLine, 4, 1) gridLayout.addWidget(self.__transmissionButton, 5, 0) gridLayout.addWidget(self.__massAttButton, 5, 1) layout.addWidget(grid) layout.addWidget(qt.VerticalSpacer(self)) #build all the connections self.connect(self.__nameLine, qt.SIGNAL('editingFinished()'), self.__nameLineSlot) self.connect(self.__numberSpin, qt.SIGNAL("valueChanged(int)"), self.__numberSpinChanged) self.connect(self.__table, qt.SIGNAL("cellChanged(int,int)"), self.__tableSlot) self.connect(self.__table, qt.SIGNAL("cellEntered(int,int)"), self.__tableSlot2) self.connect(self.__densityLine, qt.SIGNAL('editingFinished()'), self.__densitySlot) self.connect(self.__thicknessLine, qt.SIGNAL('editingFinished()'), self.__thicknessSlot) self.connect(self.__transmissionButton, qt.SIGNAL('clicked()'), self.__transmissionSlot) self.connect(self.__massAttButton, qt.SIGNAL('clicked()'), self.__massAttSlot)
def build(self, comments="True", height=3): layout = qt.QVBoxLayout(self) layout.setMargin(0) layout.setSpacing(0) self.__comments = comments commentsHBox = qt.QWidget(self) layout.addWidget(commentsHBox) commentsHBoxLayout = qt.QHBoxLayout(commentsHBox) commentsHBoxLayout.setMargin(0) commentsHBoxLayout.setSpacing(0) tableContainer = qt.QWidget(commentsHBox) commentsHBoxLayout.addWidget(tableContainer) tableContainerLayout = qt.QVBoxLayout(tableContainer) tableContainerLayout.setMargin(0) tableContainerLayout.setSpacing(0) self.__hboxTableContainer = qt.QWidget(tableContainer) hbox = self.__hboxTableContainer tableContainerLayout.addWidget(hbox) hboxLayout = qt.QHBoxLayout(hbox) hboxLayout.setMargin(0) hboxLayout.setSpacing(0) numberLabel = qt.QLabel(hbox) hboxLayout.addWidget(numberLabel) numberLabel.setText("Number of Compounds:") if QTVERSION < '4.0.0': numberLabel.setAlignment(qt.QLabel.WordBreak | qt.QLabel.AlignVCenter) else: numberLabel.setAlignment(qt.Qt.AlignVCenter) self.__numberSpin = qt.QSpinBox(hbox) hboxLayout.addWidget(self.__numberSpin) if QTVERSION < '4.0.0': self.__numberSpin.setMinValue(1) self.__numberSpin.setMaxValue(100) else: self.__numberSpin.setMinimum(1) self.__numberSpin.setMaximum(100) self.__numberSpin.setValue(1) if QTVERSION < '4.0.0': self.__table = qttable.QTable(tableContainer) self.__table.setNumRows(1) self.__table.setNumCols(2) else: self.__table = qt.QTableWidget(tableContainer) self.__table.setRowCount(1) self.__table.setColumnCount(2) tableContainerLayout.addWidget(self.__table) self.__table.setMinimumHeight( (height) * self.__table.horizontalHeader().sizeHint().height()) self.__table.setMaximumHeight( (height) * self.__table.horizontalHeader().sizeHint().height()) self.__table.setMinimumWidth(1 * self.__table.sizeHint().width()) self.__table.setMaximumWidth(1 * self.__table.sizeHint().width()) #self.__table.setSizePolicy(qt.QSizePolicy(qt.QSizePolicy.Fixed,qt.QSizePolicy.Fixed)) if QTVERSION < '4.0.0': self.__table.setVScrollBarMode(self.__table.AlwaysOn) self.__table.horizontalHeader().setClickEnabled(False) qt.QHeader.setLabel(self.__table.horizontalHeader(), 0, "Material") qt.QHeader.setLabel(self.__table.horizontalHeader(), 1, "Mass Fraction") self.__table.verticalHeader().hide() self.__table.setLeftMargin(0) else: labels = ["Material", "Mass Fraction"] for i in range(len(labels)): item = self.__table.horizontalHeaderItem(i) if item is None: item = qt.QTableWidgetItem(labels[i], qt.QTableWidgetItem.Type) self.__table.setHorizontalHeaderItem(i, item) if QTVERSION < '4.1.0': self.__table.setSelectionMode(qttable.QTable.NoSelection) else: self.__table.setSelectionMode(qt.QTableWidget.NoSelection) if self.__comments: vbox = qt.QWidget(commentsHBox) commentsHBoxLayout.addWidget(vbox) vboxLayout = qt.QVBoxLayout(vbox) #default thickness and density self.__gridVBox = qt.QWidget(vbox) grid = self.__gridVBox vboxLayout.addWidget(grid) if QTVERSION < '4.0.0': gridLayout = qt.QGridLayout(grid, 2, 2, 11, 4) else: gridLayout = qt.QGridLayout(grid) gridLayout.setMargin(11) gridLayout.setSpacing(4) densityLabel = qt.QLabel(grid) gridLayout.addWidget(densityLabel, 0, 0) densityLabel.setText("Default Density (g/cm3):") if QTVERSION < '4.0.0': densityLabel.setAlignment(qt.QLabel.WordBreak | qt.QLabel.AlignVCenter) self.__densityLine = MyQLineEdit(grid) else: densityLabel.setAlignment(qt.Qt.AlignVCenter) self.__densityLine = qt.QLineEdit(grid) validator = qt.QDoubleValidator(self.__densityLine) self.__densityLine.setValidator(validator) self.__densityLine.setReadOnly(False) gridLayout.addWidget(self.__densityLine, 0, 1) thicknessLabel = qt.QLabel(grid) gridLayout.addWidget(thicknessLabel, 1, 0) thicknessLabel.setText("Default Thickness (cm):") if QTVERSION < '4.0.0': thicknessLabel.setAlignment(qt.QLabel.WordBreak | qt.QLabel.AlignVCenter) self.__thicknessLine = MyQLineEdit(grid) else: thicknessLabel.setAlignment(qt.Qt.AlignVCenter) self.__thicknessLine = qt.QLineEdit(grid) validator = qt.QDoubleValidator(self.__thicknessLine) self.__thicknessLine.setValidator(validator) gridLayout.addWidget(self.__thicknessLine, 1, 1) self.__thicknessLine.setReadOnly(False) if QTVERSION < '4.0.0': self.connect(self.__densityLine, qt.SIGNAL('returnPressed()'), self.__densitySlot) self.connect(self.__thicknessLine, qt.SIGNAL('returnPressed()'), self.__thicknessSlot) else: self.connect(self.__densityLine, qt.SIGNAL('editingFinished()'), self.__densitySlot) self.connect(self.__thicknessLine, qt.SIGNAL('editingFinished()'), self.__thicknessSlot) if QTVERSION > '4.0.0': self.__transmissionButton = qt.QPushButton(grid) self.__transmissionButton.setText('Material Transmission') gridLayout.addWidget(self.__transmissionButton, 2, 0) self.__massAttButton = qt.QPushButton(grid) self.__massAttButton.setText('Mass Att. Coefficients') gridLayout.addWidget(self.__massAttButton, 2, 1) self.__transmissionButton.setAutoDefault(False) self.__massAttButton.setAutoDefault(False) self.connect(self.__transmissionButton, qt.SIGNAL('clicked()'), self.__transmissionSlot) self.connect(self.__massAttButton, qt.SIGNAL('clicked()'), self.__massAttSlot) vboxLayout.addWidget(qt.VerticalSpacer(vbox)) if self.__comments: #comment nameHBox = qt.QWidget(self) nameHBoxLayout = qt.QHBoxLayout(nameHBox) nameLabel = qt.QLabel(nameHBox) nameHBoxLayout.addWidget(nameLabel) nameLabel.setText("Material Name/Comment:") if QTVERSION < '4.0.0': nameLabel.setAlignment(qt.QLabel.WordBreak | qt.QLabel.AlignVCenter) else: nameLabel.setAlignment(qt.Qt.AlignVCenter) nameHBoxLayout.addWidget(qt.HorizontalSpacer(nameHBox)) if QTVERSION < '4.0.0': self.__nameLine = MyQLineEdit(nameHBox) self.connect(self.__nameLine, qt.SIGNAL('returnPressed()'), self.__nameLineSlot) else: self.__nameLine = qt.QLineEdit(nameHBox) self.connect(self.__nameLine, qt.SIGNAL('editingFinished()'), self.__nameLineSlot) nameHBoxLayout.addWidget(self.__nameLine) self.__nameLine.setReadOnly(False) longtext = "En un lugar de La Mancha, de cuyo nombre no quiero acordarme ..." self.__nameLine.setFixedWidth( self.__nameLine.fontMetrics().width(longtext)) layout.addWidget(nameHBox) self.connect(self.__numberSpin, qt.SIGNAL("valueChanged(int)"), self.__numberSpinChanged) if QTVERSION < '4.0.0': self.connect(self.__table, qt.SIGNAL("valueChanged(int,int)"), self.__tableSlot) self.connect(self.__table, qt.SIGNAL("currentChanged(int,int)"), self.__tableSlot2) else: self.connect(self.__table, qt.SIGNAL("cellChanged(int,int)"), self.__tableSlot) self.connect(self.__table, qt.SIGNAL("cellEntered(int,int)"), self.__tableSlot2)
def __init__(self, parent=None): qt.QWidget.__init__(self, parent) self.mainLayout = qt.QGridLayout(self) self.mainLayout.setContentsMargins(0, 0, 0, 0) self.mainLayout.setSpacing(2) self.__parametersDict = self._getDefaultParameters() self.__defaultEdgeEnergy = None self._polynomOptions = [ 'Modif. Victoreen', 'Victoreen', 'Constant', 'Linear', 'Parabolic', 'Cubic' ] i = 0 edgeGroupBox = qt.QGroupBox(self) edgeGroupBoxLayout = qt.QGridLayout(edgeGroupBox) edgeGroupBox.setAlignment(qt.Qt.AlignHCenter) edgeGroupBox.setTitle('Edge Position') autoButton = qt.QRadioButton(edgeGroupBox) autoButton.setText('Auto') autoButton.setChecked(True) userButton = qt.QRadioButton(edgeGroupBox) userButton.setText('User') buttonGroup = qt.QButtonGroup(edgeGroupBox) buttonGroup.addButton(autoButton, 0) buttonGroup.addButton(userButton, 1) buttonGroup.setExclusive(True) userEnergy = qt.QLineEdit(edgeGroupBox) userEnergy.setEnabled(False) validator = qt.QDoubleValidator(userEnergy) userEnergy.setValidator(validator) edgeGroupBoxLayout.addWidget(autoButton, 0, 0) edgeGroupBoxLayout.addWidget(userButton, 1, 0) edgeGroupBoxLayout.addWidget(userEnergy, 1, 1) self.mainLayout.addWidget(edgeGroupBox, 0, 0, 2, 2) #create handles to the relevant widgets self.autoEdgeButton = autoButton self.userEdgeButton = userButton self.userEdgeEnergy = userEnergy # connect the signals self.connect(buttonGroup, qt.SIGNAL('buttonClicked(int)'), self._buttonClicked) self.connect(self.userEdgeEnergy, qt.SIGNAL('editingFinished()'), self._userEdgeEnergyEditingFinished) regionsGroupBox = qt.QGroupBox(self) regionsGroupBoxLayout = qt.QGridLayout(regionsGroupBox) regionsGroupBox.setAlignment(qt.Qt.AlignHCenter) regionsGroupBox.setTitle('Regions') i = 1 for text in ["Pre-edge Polynom:", "Post-edge Polynom:"]: label = qt.QLabel(regionsGroupBox) label.setText(text) regionsGroupBoxLayout.addWidget(label, i, 0) #self.mainLayout.addWidget(qt.HorizontalSpacer(self), i, 1) i += 1 i = 1 self.widgetDict = {} for key in ['pre_edge', 'post_edge']: self.widgetDict[key] = {} c = 1 w = PolynomSelector(regionsGroupBox, options=self._polynomOptions) self.connect(w, qt.SIGNAL('activated(int)'), self._regionParameterChanged) regionsGroupBoxLayout.addWidget(w, i, c) c += 1 self.widgetDict[key]['polynomial'] = w for text in ['delta xmin', 'delta xmax']: label = qt.QLabel(regionsGroupBox) label.setText(text) self.widgetDict[key][text] = qt.QLineEdit(regionsGroupBox) self.connect(self.widgetDict[key][text], qt.SIGNAL('editingFinished()'), self._regionParameterChanged) validator = qt.QDoubleValidator(self.widgetDict[key][text]) self.widgetDict[key][text].setValidator(validator) regionsGroupBoxLayout.addWidget(label, i, c) regionsGroupBoxLayout.addWidget(self.widgetDict[key][text], i, c + 1) c += 2 i += 1 self.mainLayout.addWidget(regionsGroupBox, 0, 2) self._updateParameters()
def __init__(self, parent=None, energy=None, threshold=None, useviewer=None, name="Peak Identifier", fl=0): if QTVERSION < '4.0.0': qt.QWidget.__init__(self, parent, name, fl) self.setCaption(name) self.setIcon(qt.QPixmap(IconDict['gioconda16'])) else: if fl == 0: qt.QWidget.__init__(self, parent) else: qt.QWidget.__init__(self, parent, fl) self.setWindowTitle(name) self.setWindowIcon(qt.QIcon(qt.QPixmap(IconDict['gioconda16']))) if energy is None: energy = 5.9 if threshold is None: threshold = 0.030 if useviewer is None: useviewer = 0 self.__useviewer = useviewer layout = qt.QVBoxLayout(self) #heading self.__energyHBox = qt.QWidget(self) hbox = self.__energyHBox hbox.layout = qt.QHBoxLayout(hbox) hbox.layout.setMargin(0) hbox.layout.setSpacing(0) layout.addWidget(hbox) hbox.layout.addWidget(qt.HorizontalSpacer(hbox)) l1 = qt.QLabel(hbox) l1.setText('<b><nobr>Energy (keV)</nobr></b>') hbox.layout.addWidget(l1) self.energy = MyQLineEdit(hbox) self.energy.setText("%.3f" % energy) if QTVERSION < '4.0.0': qt.QToolTip.add(self.energy, 'Press enter to validate your energy') else: self.energy._validator = qt.QDoubleValidator(self.energy) self.energy.setValidator(self.energy._validator) self.energy.setToolTip('Press enter to validate your energy') hbox.layout.addWidget(self.energy) hbox.layout.addWidget(qt.HorizontalSpacer(hbox)) if QTVERSION < '4.0.0': self.connect(self.energy, qt.SIGNAL('returnPressed()'), self._energySlot) else: self.connect(self.energy, qt.SIGNAL('editingFinished()'), self._energySlot) #parameters self.__hbox2 = qt.QWidget(self) hbox2 = self.__hbox2 layout.addWidget(hbox2) hbox2.layout = qt.QHBoxLayout(hbox2) hbox2.layout.setMargin(0) hbox2.layout.setSpacing(0) font = hbox2.font() font.setBold(1) hbox2.setFont(font) l2 = qt.QLabel(hbox2) l2.setText('Energy Threshold (eV)') self.threshold = qt.QSpinBox(hbox2) if QTVERSION < '4.0.0': self.threshold.setMinValue(0) self.threshold.setMaxValue(1000) else: self.threshold.setMinimum(0) self.threshold.setMaximum(1000) self.threshold.setValue(int(threshold * 1000)) self.k = qt.QCheckBox(hbox2) self.k.setText('K') self.k.setChecked(1) self.l1 = qt.QCheckBox(hbox2) self.l1.setText('L1') self.l1.setChecked(1) self.l2 = qt.QCheckBox(hbox2) self.l2.setText('L2') self.l2.setChecked(1) self.l3 = qt.QCheckBox(hbox2) self.l3.setText('L3') self.l3.setChecked(1) self.m = qt.QCheckBox(hbox2) self.m.setText('M') self.m.setChecked(1) self.connect(self.threshold, qt.SIGNAL('valueChanged(int)'), self.myslot) self.connect(self.k, qt.SIGNAL('clicked()'), self.myslot) self.connect(self.l1, qt.SIGNAL('clicked()'), self.myslot) self.connect(self.l2, qt.SIGNAL('clicked()'), self.myslot) self.connect(self.l3, qt.SIGNAL('clicked()'), self.myslot) self.connect(self.m, qt.SIGNAL('clicked()'), self.myslot) hbox2.layout.addWidget(l2) hbox2.layout.addWidget(self.threshold) hbox2.layout.addWidget(self.k) hbox2.layout.addWidget(self.l1) hbox2.layout.addWidget(self.l2) hbox2.layout.addWidget(self.l3) hbox2.layout.addWidget(self.m) if self.__useviewer: if QTVERSION < '4.0.0': self.__browsertext = qt.QTextView(self) else: self.__browsertext = qt.QTextEdit(self) layout.addWidget(self.__browsertext) self.setEnergy()
def __init__(self, parent=None, options=[1, 2, 3, 4, 5, 10]): qt.QDialog.__init__(self, parent) if QTVERSION < '4.0.0': self.setCaption("NNMA Configuration Dialog") else: self.setWindowTitle("NNMA Configuration Dialog") self.mainLayout = qt.QVBoxLayout(self) self.mainLayout.setMargin(11) self.mainLayout.setSpacing(0) self.infoButton = qt.QPushButton(self) self.infoButton.setAutoDefault(False) self.infoButton.setText('About NNMA') self.mainLayout.addWidget(self.infoButton) self.connect(self.infoButton, qt.SIGNAL('clicked()'), self._showInfo) # self.methodOptions = qt.QGroupBox(self) self.methodOptions.setTitle('NNMA Method to use') self.methods = [ 'RRI', 'NNSC', 'NMF', 'SNMF', 'NMFKL', 'FNMAI', 'ALS', 'FastHALS', 'GDCLS' ] self.methodOptions.mainLayout = qt.QGridLayout(self.methodOptions) self.methodOptions.mainLayout.setMargin(0) self.methodOptions.mainLayout.setSpacing(2) self.buttonGroup = qt.QButtonGroup(self.methodOptions) i = 0 for item in self.methods: rButton = qt.QRadioButton(self.methodOptions) self.methodOptions.mainLayout.addWidget(rButton, 0, i) #self.l.setAlignment(rButton, qt.Qt.AlignHCenter) if i == 1: rButton.setChecked(True) rButton.setText(item) self.buttonGroup.addButton(rButton) self.buttonGroup.setId(rButton, i) i += 1 self.connect(self.buttonGroup, qt.SIGNAL('buttonPressed(QAbstractButton *)'), self._slot) self.mainLayout.addWidget(self.methodOptions) # NNMA configuration parameters self.nnmaConfiguration = qt.QGroupBox(self) self.nnmaConfiguration.setTitle('NNMA Configuration') self.nnmaConfiguration.mainLayout = qt.QGridLayout( self.nnmaConfiguration) self.nnmaConfiguration.mainLayout.setMargin(0) self.nnmaConfiguration.mainLayout.setSpacing(2) label = qt.QLabel(self.nnmaConfiguration) label.setText('Tolerance (0<eps<1000:') self._tolerance = qt.QLineEdit(self.nnmaConfiguration) validator = qt.QDoubleValidator(self._tolerance) self._tolerance.setValidator(validator) self._tolerance._validator = validator self._tolerance.setText("0.001") self.nnmaConfiguration.mainLayout.addWidget(label, 0, 0) self.nnmaConfiguration.mainLayout.addWidget(self._tolerance, 0, 1) label = qt.QLabel(self.nnmaConfiguration) label.setText('Maximum iterations:') self._maxIterations = qt.QSpinBox(self.nnmaConfiguration) self._maxIterations.setMinimum(1) self._maxIterations.setMaximum(1000) self._maxIterations.setValue(100) self.nnmaConfiguration.mainLayout.addWidget(label, 1, 0) self.nnmaConfiguration.mainLayout.addWidget(self._maxIterations, 1, 1) self.mainLayout.addWidget(self.nnmaConfiguration) #built in speed options self.speedOptions = qt.QGroupBox(self) self.speedOptions.setTitle("Speed Options") self.speedOptions.mainLayout = qt.QGridLayout(self.speedOptions) self.speedOptions.mainLayout.setMargin(0) self.speedOptions.mainLayout.setSpacing(2) labelPC = qt.QLabel(self) labelPC.setText("Number of PC:") self.nPC = qt.QSpinBox(self.speedOptions) self.nPC.setMinimum(0) self.nPC.setValue(10) self.nPC.setMaximum(40) self.binningLabel = qt.QLabel(self.speedOptions) self.binningLabel.setText("Spectral Binning:") self.binningCombo = qt.QComboBox(self.speedOptions) for option in options: self.binningCombo.addItem("%d" % option) self.speedOptions.mainLayout.addWidget(labelPC, 0, 0) self.speedOptions.mainLayout.addWidget(self.nPC, 0, 1) #self.speedOptions.mainLayout.addWidget(qt.HorizontalSpacer(self), 0, 2) self.speedOptions.mainLayout.addWidget(self.binningLabel, 1, 0) self.speedOptions.mainLayout.addWidget(self.binningCombo, 1, 1) self.binningCombo.setEnabled(True) #the OK button hbox = qt.QWidget(self) hboxLayout = qt.QHBoxLayout(hbox) hboxLayout.setMargin(0) hboxLayout.setSpacing(0) self.okButton = qt.QPushButton(hbox) self.okButton.setAutoDefault(False) self.okButton.setText("Accept") hboxLayout.addWidget(qt.HorizontalSpacer(hbox)) hboxLayout.addWidget(self.okButton) self.dismissButton = qt.QPushButton(hbox) self.dismissButton.setAutoDefault(False) self.dismissButton.setText("Dismiss") hboxLayout.addWidget(qt.HorizontalSpacer(hbox)) hboxLayout.addWidget(self.dismissButton) hboxLayout.addWidget(qt.HorizontalSpacer(hbox)) self.mainLayout.addWidget(self.speedOptions) self.mainLayout.addWidget(hbox) self.connect(self.okButton, qt.SIGNAL("clicked()"), self.accept) self.connect(self.dismissButton, qt.SIGNAL("clicked()"), self.reject) self._infoDocument = qt.QTextEdit() self._infoDocument.setReadOnly(True) self._infoDocument.setText(NNMAModule.__doc__) self._infoDocument.hide() self.mainLayout.addWidget(self._infoDocument)
def __init__(self, parent = None): qt.QWidget.__init__(self, parent) self.mainLayout = qt.QVBoxLayout(self) self.gridWidget = qt.QWidget(self) self.gridLayout = qt.QGridLayout(self.gridWidget) self.gridLayout.setMargin(0) self.gridLayout.setSpacing(2) self.labelList = ['X Axis', 'Y Axis', 'N X Labels', 'N Y Labels', 'Origin', 'Interpolation', 'Colormap', 'Lin/Log Colormap', 'Colorbar', 'Contour', 'Contour Labels', 'Contour Label Format', 'Contour Levels', 'Contour Line Width', 'Image Background', 'X Pixel Size', 'Y Pixel Size', 'X Origin', 'Y Origin', 'Zoom X Min', 'Zoom X Max', 'Zoom Y Min', 'Zoom Y Max', 'Value Min', 'Value Max', 'Output dpi'] self.keyList = [] for label in self.labelList: self.keyList.append(label.lower().replace(' ','').replace('/',"")) self.comboBoxList = [] for i in range(len(self.labelList)): label = qt.QLabel(self) label.setText(self.labelList[i]) if self.labelList[i] in ['X Axis', 'Y Axis']: options = ['Off', 'On'] if self.labelList[i] in ['N X Labels', 'N Y Labels']: options = ['Auto', '1', '2', '3', '4', '5', '6', '7', '8', '9'] elif self.labelList[i] in ['Colormap']: options = ['Temperature','Grey', 'Yerg',\ 'Red', 'Green', 'Blue',\ 'Rainbow', 'Jet','Hot', 'Cool', 'Copper'] for candidate in ['spectral', 'Paired', 'Paired_r', 'PuBu', 'PuBu_r', 'RdBu', 'RdBu_r', 'gist_earth', 'gist_earth_r', 'Blues', 'Blues_r', 'YlGnBu', 'YlGnBu_r']: if hasattr(cm, candidate): options.append(candidate) elif self.labelList[i] in ['Lin/Log Colormap']: options = ['Linear','Logarithmic'] elif self.labelList[i] in ['Colorbar']: options = ['None', 'Vertical', 'Horizontal'] elif self.labelList[i] in ['Origin']: options = ['Lower', 'Upper'] elif self.labelList[i] in ['Interpolation']: options = ['Nearest', 'Bilinear'] elif self.labelList[i] in ['Contour']: options = ['Off', 'Line'] elif self.labelList[i] in ['Contour Labels']: options = ['On', 'Off'] elif self.labelList[i] in ['Contour Label Format']: options = ['%.3f', '%.2f', '%.1f', '%.0f', '%.1e', '%.2e', '%.3e'] elif self.labelList[i] in ['Contour Levels']: options = ["10", "9", "8", "7", "6", "5", "4", "3", "2", "1"] elif self.labelList[i] in ['Image Background']: options = ['Black', 'White', 'Grey'] if self.labelList[i] in ['Contour Levels']: line = qt.QSpinBox(self) line.setMinimum(1) line.setMaximum(1000) line.setValue(10) elif self.labelList[i] in ['Contour Line Width']: line = qt.QSpinBox(self) line.setMinimum(1) line.setMaximum(100) line.setValue(10) elif i <= self.labelList.index('Image Background'): line = SimpleComboBox(self, options) else: line = MyLineEdit(self) validator = qt.QDoubleValidator(line) line.setValidator(validator) if 'Zoom' in self.labelList[i]: tip = "This zoom is in physical units.\n" tip += "This means pixel size corrected.\n" tip += "To disable zoom, just set both\n" tip += "limits to the same value." line.setToolTip(tip) line.setText('0.0') elif 'Origin' in self.labelList[i]: tip = "First pixel coordinates in physical units.\n" tip += "This means pixel size corrected.\n" line.setToolTip(tip) line.setText('0.0') elif 'Value' in self.labelList[i]: tip = "Clipping values of the data.\n" tip += "To disable clipping, just set both\n" tip += "limits to the same value." line.setToolTip(tip) line.setText('0.0') elif 'Output dpi' in self.labelList[i]: tip = "=Output file resolution." line.setToolTip(tip) line.setText("%d" % 100) else: line.setText('1.0') self.gridLayout.addWidget(label, i, 0) self.gridLayout.addWidget(line, i, 1) self.comboBoxList.append(line) self.mainLayout.addWidget(self.gridWidget) self.mainLayout.addWidget(qt.VerticalSpacer(self)) self.setPixmapMode(False)