Exemplo n.º 1
0
def extra_keywords_to_widgets(extra_keyword_definition):
    """Create widgets for extra keyword.

    :param extra_keyword_definition: An extra keyword definition.
    :type extra_keyword_definition: dict

    :return: QCheckBox and The input widget
    :rtype: (QCheckBox, QWidget)
    """
    # Check box
    check_box = QCheckBox(extra_keyword_definition['name'])
    check_box.setToolTip(extra_keyword_definition['description'])
    check_box.setChecked(True)

    # Input widget
    if extra_keyword_definition['type'] == float:
        input_widget = QDoubleSpinBox()
        input_widget.setMinimum(extra_keyword_definition['minimum'])
        input_widget.setMaximum(extra_keyword_definition['maximum'])
        input_widget.setSuffix(extra_keyword_definition['unit_string'])
    elif extra_keyword_definition['type'] == int:
        input_widget = QSpinBox()
        input_widget.setMinimum(extra_keyword_definition['minimum'])
        input_widget.setMaximum(extra_keyword_definition['maximum'])
        input_widget.setSuffix(extra_keyword_definition['unit_string'])
    elif extra_keyword_definition['type'] == unicode:
        if extra_keyword_definition.get('options'):
            input_widget = QComboBox()
            options = extra_keyword_definition['options']
            for option in options:
                input_widget.addItem(
                    option['name'],
                    option['key'],
                )
            default_option_index = input_widget.findData(
                extra_keyword_definition['default_option'])
            input_widget.setCurrentIndex(default_option_index)
        else:
            input_widget = QLineEdit()
    elif extra_keyword_definition['type'] == datetime:
        input_widget = QDateTimeEdit()
        input_widget.setCalendarPopup(True)
        input_widget.setDisplayFormat('hh:mm:ss, d MMM yyyy')
        input_widget.setDateTime(datetime.now())
    else:
        raise Exception
    input_widget.setToolTip(extra_keyword_definition['description'])

    # Signal
    # noinspection PyUnresolvedReferences
    check_box.stateChanged.connect(input_widget.setEnabled)

    return check_box, input_widget
Exemplo n.º 2
0
    def widgetByType(self, valueType):
        if isinstance(valueType, str):
            valPieces = valueType.lower().split(":")
            typeStr = valPieces[0]

            rngMin = "min"
            rngMax = "max"

            if len(valPieces) == 3:
                rngMin = valPieces[1] if valPieces[1] != "" else "min"
                rngMax = valPieces[2] if valPieces[2] != "" else "max"

            if typeStr == "float":
                box = QDoubleSpinBox(self)
                if rngMin == "min":
                    rngMin = -2000000000.
                else:
                    rngMin = float(rngMin)

                if rngMax == "max":
                    rngMax = 2000000000.
                else:
                    rngMax = float(rngMax)

                box.setRange(rngMin, rngMax)
                box.setDecimals(10)
                return box
            elif typeStr == "int":
                box = QSpinBox(self)
                if rngMin == "min":
                    rngMin = -2**31 + 1
                else:
                    rngMin = int(rngMin)

                if rngMax == "max":
                    rngMax = 2**31 - 1
                else:
                    rngMax = int(rngMax)

                box.setRange(rngMin, rngMax)
                return box
            elif typeStr == "str":
                return QLineEdit(self)
            elif typeStr == "bool":
                return QCheckBox(self)
        elif isinstance(valueType, list):
            box = QComboBox(self)
            for item in valueType:
                box.addItem(item)

            return box