def _createInputField(quantityname=None, quantityunit=None): if within_FreeCADGui: if quantityname and hasattr(FreeCAD.Units, quantityname): widget = ui.createWidget("Gui::InputField") unit = getattr(FreeCAD.Units, quantityname) # string type? if qunit: widget.setProperty('unit', quantityunit) else: quantity = FreeCAD.Units.Quantity(1, unit) widget.setProperty( 'unit', quantity.getUserPreferred()[2]) # by the third [2]? return widget else: FreeCAD.Console.PrintMessage( 'Not known unit for property: {}\n'.format(quantityname)) widget = QDoubleSpinBox() # widget.setValue(0.0) widget.setRange(-1e10, 1e10) # give a range big enough return widget
class SimpleSpinOption(SimpleOption): def __init__(self, settingsName, labelText, defaultValue, integer=False, checkable=False): self.integer = integer super(SimpleSpinOption,self).__init__(settingsName, labelText, defaultValue, checkable) def editor(self, defaultValue): if self.integer: self.spinBox = QSpinBox() else: self.spinBox = QDoubleSpinBox() self.spinBox.setRange(0,10**5) self.spinBox.setValue(float(QSettings().value(self.settingsName, defaultValue))) self.spinBox.setToolTip('Default value: %s' % defaultValue) self.spinBox.setAlignment(Qt.AlignLeft|Qt.AlignTop) self.layout().addWidget(self.spinBox) def setEnabled(self, e): self.spinBox.setEnabled(e) def getValue(self): return self.spinBox.value() def setValue(self, newValue): self.spinBox.setValue(newValue) def setRange(self, min, max): self.spinBox.setRange(min, max)
class Form(QDialog): def __init__(self, parent=None): self.rates = {} super(Form, self).__init__(parent) date = self.get_data() rates = sorted(self.rates.keys()) # Create UI Elements ------------------------------------------------------------------------------------------- dateLabel = QLabel(date) self.fromComboBox = QComboBox() self.toComboBox = QComboBox() self.fromComboBox.addItems(rates) self.toComboBox.addItems(rates) self.fromSpinBox = QDoubleSpinBox() # Saturation of minimum and maximum values self.fromSpinBox.setRange(0.01, 1000) # Set initial value self.fromSpinBox.setValue(1.00) self.toLabel = QLabel('1.00') # Layout ------------------------------------------------------------------------------------------------------- layout = QGridLayout() # addWidget (Widget, row, column) layout.addWidget(dateLabel, 0, 0) layout.addWidget(self.fromComboBox, 1, 0) layout.addWidget(self.toComboBox, 2, 0) layout.addWidget(self.fromSpinBox, 1, 1) layout.addWidget(self.toLabel, 2, 1) self.setLayout(layout) # Signals ------------------------------------------------------------------------------------------------------ self.fromComboBox.currentIndexChanged.connect(self.update_ui) self.toComboBox.currentIndexChanged.connect(self.update_ui) self.fromSpinBox.valueChanged.connect(self.update_ui) # Force window to stay on top when start self.setWindowFlags(Qt.WindowStaysOnTopHint) def get_data(self): date = 'Unknown' url = "http://www.bankofcanada.ca/en/markets/csv/exchange_eng.csv" try: date = None fh = urllib2.urlopen(url) for line in fh: line = line.rstrip() if not line or line.startswith(("#", "Closing ")): continue fields = line.split(",") if line.startswith("Date "): date = fields[-1] else: try: value = float(fields[-1]) self.rates[unicode(fields[0])] = value except ValueError: pass return "Exchange Rates Date: " + date except Exception, e: return "Failed to download: \n%s" % e
class Layer(object): def __init__(self): super(Layer, self).__init__() self.orientation = Quaternion() self.picked = None self.show = QCheckBox() self.show.setChecked(True) self.alpha_slider = QSlider(QtCore.Qt.Orientation.Horizontal) self.alpha_slider.setRange(0, 1024) self.alpha_slider.setValue(1024) self.alpha_number = QDoubleSpinBox() self.alpha_number.setDecimals(3) self.alpha_number.setSingleStep(0.01) self.alpha_number.setRange(0, 1) self.alpha_number.setValue(1) self.alpha_slider.valueChanged.connect(self._alphaSliderChanged) self.alpha_number.valueChanged.connect(self._alphaNumberChanged) self.move = QCheckBox() self.move.setChecked(True) self.quat = QLineEdit() font = QFont('monospace') font.setStyleHint(QFont.TypeWriter) self.quat.setFont(font) default_quat = '+0.000, +1.000, +0.000, +0.000' margins = self.quat.textMargins() self.quat.setFixedWidth( # HACK -------------------------------------------v QFontMetrics(self.quat.font()).width(default_quat + ' ') + margins.left() + margins.right() ) self.quat.setInputMask('#0.000, #0.000, #0.000, #0.000') self.quat.setMaxLength(30) self.quat.setText(default_quat) self.quat.editingFinished.connect(self._orientationChanged) self.nbytes = QLabel() self.nbytes.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) self.nbytes.setText('0') self.label = QLabel() self.label.setText('<empty>') def multiplyOrientation(self, quat): self.setOrientation(quat * self.orientation) def setOrientation(self, quat): self.orientation = quat self.quat.setText( '%+1.3f, %+1.3f, %+1.3f, %+1.3f' % ( self.orientation.w, self.orientation.x, self.orientation.y, self.orientation.z, ) ) def _orientationChanged(self): text = self.quat.text() def alpha(self): return self.alpha_number.value() if self.show.isChecked() else 0.0 def _alphaSliderChanged(self): self.alpha_number.setValue(self.alpha_slider.value() / 1024.0) def _alphaNumberChanged(self): self.alpha_slider.setValue(1024 * self.alpha_number.value()) def setup_ui(self, table, row): widgets = [ None, CenterH(self.show), self.alpha_slider, self.alpha_number, CenterH(self.move), self.quat, self.nbytes, self.label, ] for (column, widget) in enumerate(widgets): if widget is not None: table.setCellWidget(row, column, widget) def load_file(self, file_name, in_format): self.sphere = proj.load_sphere(file_name, projection=in_format) in_format = self.sphere.__class__ print('Loaded input %s from %s.' % (in_format.__name__, file_name)) self.texture_id = glGenTextures(1) self.sphere.to_gl(self.texture_id) self.shader = Shader( vert=VERTEX_SHADER, frag=FRAGMENT_SHADER + self.sphere.get_glsl_sampler(), ) self.label.setText(file_name) self.nbytes.setText(read_bsize(self.sphere.array.nbytes))
class SliderFloatWidget(QWidget): """ SliderFloatWidget """ valueChanged = Signal(int) def __init__(self): super(SliderFloatWidget, self).__init__() self.label = QLabel() self.slider = QSlider(Qt.Horizontal) self.spinbox = QDoubleSpinBox() self.slider.valueChanged.connect(self.changedValueFromSlider) self.spinbox.valueChanged.connect(self.changedValueFromSpinBox) layout = QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setVerticalSpacing(0) # layout.setHorizontalSpacing(0) layout.addWidget(self.label, 0, 0) layout.addWidget(self.slider, 0, 1) layout.addWidget(self.spinbox, 0, 2) self.setLayout(layout) def setName(self, name): """ Set the name for the slider """ self.label.setText(name) def setRange(self, range): """ Set the range for the value """ self.range = range self.slider.setMinimum(0) self.slider.setMaximum(100) self.spinbox.setRange(self.range[0], self.range[1]) diff = self.range[1] - self.range[0] if diff <= 1: self.spinbox.setSingleStep(0.1) def setValue(self, value): """ Set the value for the slider and the spinbox """ ratio = (value - self.range[0]) / (self.range[1] - self.range[0]) self.slider.setValue(ratio * 100) self.spinbox.setValue(value) def value(self): return self.spinbox.value() @Slot(int) def changedValueFromSlider(self, value): ratio = value / 100.0 val = self.range[0] + ratio * (self.range[1] - self.range[0]) self.spinbox.setValue(val) self.valueChanged.emit(val) @Slot(float) def changedValueFromSpinBox(self, value): ratio = (value - self.range[0]) / (self.range[1] - self.range[0]) self.slider.setValue(ratio * 100) self.valueChanged.emit(value)
class Form(QDialog): def __init__(self,parent=None): super(Form,self).__init__(parent) date = self.get_data() rates = sorted(self.rates.keys()) dateLabel = QLabel(date) self.fromComboBox = QComboBox() self.toComboBox = QComboBox() self.fromComboBox.addItems(rates) self.toComboBox.addItems(rates) self.fromSpinBox = QDoubleSpinBox() self.fromSpinBox.setRange(0.01,1000) self.fromSpinBox.setValue(1.00) self.toLabel = QLabel("1.00") layout = QGridLayout(); layout.addWidget(dateLabel,5,0) layout.addWidget(self.fromComboBox, 1,0) layout.addWidget(self.toComboBox,2,0) layout.addWidget(self.fromSpinBox,1,1) layout.addWidget(self.toLabel,2,1) self.setLayout(layout) #Connect Signal self.fromComboBox.currentIndexChanged.connect(self.update_ui) self.toComboBox.currentIndexChanged.connect(self.update_ui) self.fromSpinBox.valueChanged.connect(self.update_ui) def get_data(self): self.rates = {} try: date = "Unknown" # Thanks Mr Mark Summerfield fh = urllib.urlopen("http://www.bankofcanada.ca/valet/observations/group/FX_RATES_DAILY/csv?start_date=2017-01-03") for line in fh: line = line.rstrip() if not line or line.startswith(("#", "Closing")): continue fields = line.split(",") if line.startswith("Date "): date = fields[-1] else: try: value = float(fields[-1]) self.rates[fields[0]] = value except ValueError: pass return "Exchange rates date: " + date except Exception, e: return "Failued to download:\n%s" % e
class SliderFloatWidget(QWidget): """ SliderFloatWidget """ valueChanged = Signal(int) def __init__(self): super(SliderFloatWidget, self).__init__() self.label = QLabel() self.slider = QSlider(Qt.Horizontal) self.spinbox = QDoubleSpinBox() self.slider.valueChanged.connect(self.changedValueFromSlider) self.spinbox.valueChanged.connect(self.changedValueFromSpinBox) # Keep track of whether one of the values was changed # By setting the value of the slider and the spinbox, valueChanged # events are fired. These events have to be ignored self._changed = False layout = QGridLayout() layout.setContentsMargins(0, 0, 0, 0) layout.setVerticalSpacing(0) layout.addWidget(self.label, 0, 0) layout.addWidget(self.slider, 0, 1) layout.addWidget(self.spinbox, 0, 2) self.setLayout(layout) def setName(self, name): """ Set the name for the slider """ self.label.setText(name) def setRange(self, range): """ Set the range for the value """ self.range = range self.slider.setMinimum(0.0) self.slider.setMaximum(100.0) self.spinbox.setRange(self.range[0], self.range[1]) diff = self.range[1] - self.range[0] if diff <= 1: self.spinbox.setSingleStep(0.01) def setValue(self, value): """ Set the value for the slider and the spinbox """ ratio = (value - self.range[0]) / (self.range[1] - self.range[0]) self._changed = False self.slider.setValue(ratio * 100) self._changed = False self.spinbox.setValue(value) self._changed = False def value(self): return self.spinbox.value() @Slot(int) def changedValueFromSlider(self, value): if self._changed: self._changed = False return ratio = value / 100.0 val = self.range[0] + ratio * (self.range[1] - self.range[0]) self._changed = True self.spinbox.setValue(val) self.valueChanged.emit(val) @Slot(float) def changedValueFromSpinBox(self, value): if self._changed: self._changed = False return ratio = (value - self.range[0]) / (self.range[1] - self.range[0]) self._changed = True self.slider.setValue(ratio * 100.0) self.valueChanged.emit(value)