def __init__(self, parent, obj): super(PropertiesWidget, self).__init__() self.obj = obj self.parent = parent self.grid = QGridLayout() self.grid.setSizeConstraint(self.grid.SetMinAndMaxSize) title = Label("Propriété : " + self.obj.type_, 16) title.setMaximumHeight(80) title.setMinimumHeight(80) title.setAlignment(Qt.AlignHCenter) self.grid.addWidget(title, 0, 0, 1, 2) self.grid.setRowStretch(0, 1) nb = 1 for p in get_properties(self.obj.type_): label = Label(p[0], 12) label.setMaximumHeight(50) label.setMinimumHeight(50) self.grid.addWidget(label, nb, 0) if p[1] == "str": widget = QLineEdit() if p[0] == "Nom": widget.setText(self.obj.name) else: widget.setText(self.obj.properties.get(p[0], "")) widget.textChanged.connect( lambda text="", prop=p[0]: self.set_text_for(text, prop)) elif p[1] == "bool": widget = QCheckBox() if self.obj.properties.get(p[0], False): widget.setChecked(True) widget.stateChanged.connect( lambda state=0, prop=p[0]: self.set_bool_for(state, prop)) elif p[1] == "int": widget = QSpinBox() widget.setMaximum(3000) widget.setMinimum(-3000) widget.setValue(self.obj.properties.get(p[0], 0)) widget.valueChanged.connect( lambda value=0, prop=p[0]: self.set_int_for(value, prop)) elif "|" in p[1] and p[1].split("|")[0] == "list": widget = QComboBox() for i in p[1].split("|")[1].split(", "): widget.addItem(i) widget.setCurrentText( self.obj.properties.get(p[0], p[1].split("|")[1].split(", ")[0])) widget.currentTextChanged.connect( lambda value="", prop=p[0]: self.set_text_for(value, prop)) elif p[1] == "color": widget = QPushButton("Sélectionner") widget.clicked.connect( lambda checked=False, prop=p[0]: self.set_color_for(prop)) elif p[1] == "colorNone": widget = QWidget() layout = QGridLayout() select = QPushButton("Sélectionner") select.clicked.connect( lambda checked=False, prop=p[0]: self.set_color_for(prop)) delete = QPushButton("Supprimer") delete.clicked.connect( lambda checked=False, prop=p[0]: self.set_none_for(prop)) layout.addWidget(select, 0, 0) layout.addWidget(delete, 0, 1) widget.setLayout(layout) elif p[1] == "file": widget = QPushButton("Sélectionner") widget.clicked.connect( lambda checked=False, prop=p[0]: self.set_file_for(prop)) elif p[1] == "fileNone": widget = QWidget() layout = QGridLayout() select = QPushButton("Sélectionner") select.clicked.connect( lambda checked=False, prop=p[0]: self.set_file_for(prop)) delete = QPushButton("Supprimer") delete.clicked.connect( lambda checked=False, prop=p[0]: self.set_none_for(prop)) layout.addWidget(select, 0, 0) layout.addWidget(delete, 0, 1) widget.setLayout(layout) elif p[1] == "files": widget = QPushButton("Sélectionner") widget.clicked.connect( lambda checked=False, prop=p[0]: self.set_files_for(prop)) else: raise TypeError("Unknown type for properties : " + p[1]) self.grid.addWidget(widget, nb, 1) self.grid.setRowStretch(nb, 1) nb += 1 scripting = QPushButton("Modifier Script") scripting.clicked.connect(self.edit_script) self.grid.addWidget(scripting, nb, 0, 1, 2) end_spacer = QSpacerItem(20, 20, QSizePolicy.Preferred, QSizePolicy.Expanding) self.grid.addItem(end_spacer, nb + 1, 0) for i in range(0, 2): self.grid.setColumnStretch(i, 1) self.setLayout(self.grid)
def __init__(self, parent, metadata): """Groupbox for custom extension fields filling form.""" super().__init__() self.setTitle(metadata['neurodata_type']) self.parent = parent self.metadata = metadata self.group_type = metadata['neurodata_type'] self.lbl_name = QLabel('name<span style="color:' + required_asterisk_color + ';">*</span>:') self.form_name = QLineEdit(metadata['name']) self.form_name.setToolTip("The unique name of this " + metadata['neurodata_type'] + " group.") nInstances = 0 for grp in self.parent.groups_list: if isinstance(grp, metadata['neurodata_type']): nInstances += 1 if nInstances > 0: self.form_name.setText(metadata['name'] + str(nInstances)) self.grid = QGridLayout() self.grid.setColumnStretch(3, 1) self.grid.setColumnStretch(5, 1) self.grid.addWidget(self.lbl_name, 0, 0, 1, 2) self.grid.addWidget(self.form_name, 0, 2, 1, 4) # Dynamically created custom fields self.intValidator = QIntValidator(self) self.floatValidator = QDoubleValidator(self) keys_list = list(metadata.keys()) keys_list.remove('name') keys_list.remove('neurodata_type') for ii, key in enumerate(keys_list): val = metadata[key] lbl_key = QLabel(key + ':') setattr(self, 'lbl_' + key, lbl_key) if isinstance(val, bool): chk_val = QLineEdit(str(val)) chk_val = QCheckBox("True") chk_val.setChecked(val) setattr(self, 'form_' + key, chk_val) self.grid.addWidget(lbl_key, ii + 1, 0, 1, 2) self.grid.addWidget(chk_val, ii + 1, 2, 1, 2) elif isinstance(val, (int, np.int)): form_val = QLineEdit(str(val)) form_val.setValidator(self.intValidator) setattr(self, 'form_' + key, form_val) self.grid.addWidget(lbl_key, ii + 1, 0, 1, 2) self.grid.addWidget(form_val, ii + 1, 2, 1, 4) elif isinstance(val, (float, np.float)): form_val = QLineEdit(str(val)) form_val.setValidator(self.floatValidator) setattr(self, 'form_' + key, form_val) self.grid.addWidget(lbl_key, ii + 1, 0, 1, 2) self.grid.addWidget(form_val, ii + 1, 2, 1, 4) elif isinstance(val, str): form_val = QLineEdit(str(val)) setattr(self, 'form_' + key, form_val) self.grid.addWidget(lbl_key, ii + 1, 0, 1, 2) self.grid.addWidget(form_val, ii + 1, 2, 1, 4) elif isinstance(val, datetime): pass # form_date = QLineEdit(val.strftime("%d/%m/%Y")) # form_date.setToolTip("dd/mm/yyyy") # setattr(self, 'form_date_'+str(ii), form_date) # form_time = QLineEdit(val.strftime("%H:%M")) # form_time.setToolTip("dd/mm/yyyy") # setattr(self, 'form_time_'+str(ii), form_time) # self.grid.addWidget(lbl_key, ii+1, 0, 1, 2) # self.grid.addWidget(form_date, ii+1, 2, 1, 2) # self.grid.addWidget(form_time, ii+1, 4, 1, 2) self.setLayout(self.grid)