def _parseDict(self, config, ui): l = QVBoxLayout() lst = list(config.keys()) for k in lst: t = type(config[k]) if t == type(int()): hbox = QHBoxLayout() label = QLabel(k) edit = QLineEdit(str(config[k])) val = QIntValidator(self) edit.setValidator(val) hbox.addWidget(label) hbox.addWidget(edit) l.addLayout(hbox) ui[k] = (edit, label, hbox, val) elif t == type(float()): hbox = QHBoxLayout() label = QLabel(k) edit = QLineEdit(str(config[k])) val = QDoubleValidator(self) edit.setValidator(val) hbox.addWidget(label) hbox.addWidget(edit) l.addLayout(hbox) ui[k] = (edit, label, hbox, val) elif t == type(list()): hbox = QHBoxLayout() label = QLabel(k) edit = QComboBox() i = 0 for s in config[k][0]: edit.addItem(s) if i == config[k][1]: edit.setCurrentIndex(i) i += 1 hbox.addWidget(label) hbox.addWidget(edit) l.addLayout(hbox) ui[k] = (edit, label, hbox) elif t == type(dict()): gbox = QGroupBox() gbox.setTitle(k) ui[k] = {"gbox":gbox} l2 = self._parseDict(config[k], ui[k]) ui[k]["layout"] = l2 gbox.setLayout(l2) l.addWidget(gbox) return l
def _parseDict(self, config, ui): l = QVBoxLayout() lst = list(config.keys()) for k in lst: t = type(config[k]) if t == type(int()): hbox = QHBoxLayout() label = QLabel(k) edit = QLineEdit(str(config[k])) val = QIntValidator(self) edit.setValidator(val) hbox.addWidget(label) hbox.addWidget(edit) l.addLayout(hbox) ui[k] = (edit, label, hbox, val) elif t == type(float()): hbox = QHBoxLayout() label = QLabel(k) edit = QLineEdit(str(config[k])) val = QDoubleValidator(self) edit.setValidator(val) hbox.addWidget(label) hbox.addWidget(edit) l.addLayout(hbox) ui[k] = (edit, label, hbox, val) elif t == type(list()): hbox = QHBoxLayout() label = QLabel(k) edit = QComboBox() i = 0 for s in config[k][0]: edit.addItem(s) if i == config[k][1]: edit.setCurrentIndex(i) i += 1 hbox.addWidget(label) hbox.addWidget(edit) l.addLayout(hbox) ui[k] = (edit, label, hbox) elif t == type(dict()): gbox = QGroupBox() gbox.setTitle(k) ui[k] = {"gbox": gbox} l2 = self._parseDict(config[k], ui[k]) ui[k]["layout"] = l2 gbox.setLayout(l2) l.addWidget(gbox) return l
class multipleListWidget(QWidget): def __init__(self, parent, typeid, predefs, editable): QWidget.__init__(self) self.parent = parent self.typeid = typeid self.editable = editable self.predefs = predefs self.init() def init(self): self.vbox = QVBoxLayout() self.vbox.setSpacing(5) self.vbox.setMargin(0) self.createHeader() self.valuelist = QListWidget() self.vbox.addWidget(self.valuelist) self.setLayout(self.vbox) def createHeader(self): self.whead = QWidget() self.headerlayout = QHBoxLayout() self.headerlayout.setSpacing(0) self.headerlayout.setMargin(0) if self.typeid in (typeId.Node, typeId.Path) and self.editable: self.addPath() else: self.addSingleArgument() self.addButton = QPushButton(QIcon(":add.png"), "") self.rmButton = QPushButton(QIcon(":del_dump.png"), "") self.addButton.setIconSize(QSize(16, 16)) self.rmButton.setIconSize(QSize(16, 16)) self.connect(self.addButton, SIGNAL("clicked()"), self.addParameter) self.connect(self.rmButton, SIGNAL("clicked()"), self.rmParameter) self.connect(self.addButton, SIGNAL("clicked()"), self.parent.argumentChanged) self.connect(self.rmButton, SIGNAL("clicked()"), self.parent.argumentChanged) self.headerlayout.addWidget(self.addButton, 0) self.headerlayout.addWidget(self.rmButton, 0) self.whead.setLayout(self.headerlayout) self.vbox.addWidget(self.whead) def addParameterConfig(self, config): try : if len(config) : for item in config: self.valuelist.insertItem(self.valuelist.count() + 1, item) except TypeError: self.valuelist.insertItem(self.valuelist.count() + 1, config) def addParameter(self): if isinstance(self.container, QComboBox): item = self.container.currentText() else: item = self.container.text() if len(self.valuelist.findItems(item, Qt.MatchExactly)) == 0: self.valuelist.insertItem(self.valuelist.count() + 1, item) def rmParameter(self): selected = self.valuelist.selectedItems() for item in selected: row = self.valuelist.row(item) self.valuelist.takeItem(row) def addSingleArgument(self): if len(self.predefs) > 0: self.container = QComboBox() for value in self.predefs: if self.typeid == typeId.Node: self.container.addItem(value.value().name()) else: self.container.addItem(value.toString()) self.container.setEditable(self.editable) else: self.container = QLineEdit() self.container.setReadOnly(self.editable) self.headerlayout.addWidget(self.container, 2) def addPath(self): if len(self.predefs) > 0: self.container = QComboBox() self.container.setReadOnly(False) for value in self.predefs: self.container.addItem(value.toString()) else: self.container = QLineEdit() self.container.setReadOnly(False) if self.typeid == typeId.Path: browse = addLocalPathButton(self, key, self.container, isdir=False) else: browse = addLocalPathButton(self, key, self.container, isdir=False, nodetype=True) self.headerlayout.addWidget(self.container, 2) self.headerlayout.addWidget(browse, 0) def addPredefValue(self): selected = self.predefs.selectedItems() for item in selected: self.valuelist.insertItem(self.valuelist.count() + 1, item.text())
def addRichTypes(self, l): """set the list of richtypes""" for q in l: i = len(self.richTypes) self.richTypes.append(q) l = QLabel(self) self.qlabels.append(l) l.setText(q.name) l.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.MinimumExpanding) l.setToolTip(q.descr) self.gridLayout.addWidget(l, i, 0, 1, 1) cls = q.__class__ if cls == Text: w = QLineEdit(self) w.setMinimumSize(300, 30) if q.maxLen: w.setMaxLength(q.maxLen) w.setText(q.v) elif cls == MLText: w = QTextEdit(self) w.setAcceptRichText(False) w.setMinimumSize(300, 60) w.setText(q.v) elif cls == Choice: w = QComboBox(self) c = [unicode(x) for x in q.choices] c.sort() w.addItems(c) idx = w.findText(unicode(q.v)) if idx >= 0: w.setCurrentIndex(idx) elif cls == MultiChoice: w = QListWidget(self) w.setSelectionMode(QAbstractItemView.MultiSelection) w.setMinimumSize(100, 60) c = [unicode(x) for x in q.choices] c.sort() v = [unicode(x) for x in q.v] for ii, s in enumerate(c): w.addItem(s) if s in v: w.item(ii).setSelected(True) elif cls == Bool: w = QCheckBox(self) if q.v: w.setCheckState(Qt.Checked) else: w.setCheckState(Qt.Unchecked) elif cls == Integer: w = QSpinBox(self) if q.min is not None: w.setMinimum(q.min) if q.max is not None: w.setMaximum(q.max) if q.step is not None: w.setSingleStep(q.step or 0.01) if q.unit: w.setSuffix(' '+q.unit) w.setValue(q.v) elif cls == Float: w = QDoubleSpinBox(self) if q.min is not None: w.setMinimum(q.min) if q.max is not None: w.setMaximum(q.max) w.setSingleStep(q.step or 0.01) if q.unit: w.setSuffix(' '+q.unit) w.setValue(q.v) elif cls == DateTime: w = QDateTimeEdit(self) w.setCalendarPopup(True) dt = QDateTime() dt.setTime_t(q.v) w.setDateTime(dt) if q.min is not None: mindt = QDateTime() mindt.setTime_t(q.min) w.setMinimumDate(mindt.date()) if q.max is not None: maxdt = QDateTime() maxdt.setTime_t(q.max) w.setMaximumDate(maxdt.date()) l.setBuddy(w) w.setToolTip(q.descr) w.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding) w.adjustSize() self.gridLayout.addWidget(w, i, 1, 1, 1) self.qwidgets.append(w) self.adjustSize()