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
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