def __init__( self, possible_field_names=None, parent: QListWidget = None, instrument: "Instrument" = None, # noqa: F821 hide_name_field: bool = False, ): super(FieldWidget, self).__init__(parent) if possible_field_names is None: possible_field_names = [] self.edit_dialog = QDialog(parent=self) self.attrs_dialog = FieldAttrsDialog(parent=self) self.instrument = instrument self.field_name_edit = FieldNameLineEdit(possible_field_names) self.hide_name_field = hide_name_field if hide_name_field: self.name = str(uuid.uuid4()) self.units_line_edit = QLineEdit() self.unit_validator = UnitValidator() self.units_line_edit.setValidator(self.unit_validator) self.unit_validator.is_valid.connect( partial(validate_line_edit, self.units_line_edit)) self.units_line_edit.setPlaceholderText(CommonAttrs.UNITS) self.field_type_combo = QComboBox() self.field_type_combo.addItems([item.value for item in FieldType]) self.field_type_combo.currentIndexChanged.connect( self.field_type_changed) fix_horizontal_size = QSizePolicy() fix_horizontal_size.setHorizontalPolicy(QSizePolicy.Fixed) self.field_type_combo.setSizePolicy(fix_horizontal_size) self.value_type_combo = QComboBox() self.value_type_combo.addItems(list(DATASET_TYPE.keys())) self.value_type_combo.currentIndexChanged.connect( self.dataset_type_changed) self.value_line_edit = QLineEdit() self.value_line_edit.setPlaceholderText("value") self._set_up_value_validator(False) self.dataset_type_changed(0) self.nx_class_combo = QComboBox() self.edit_button = QPushButton("Edit") edit_button_size = 50 self.edit_button.setMaximumSize(edit_button_size, edit_button_size) self.edit_button.setSizePolicy(fix_horizontal_size) self.edit_button.clicked.connect(self.show_edit_dialog) self.attrs_button = QPushButton("Attrs") self.attrs_button.setMaximumSize(edit_button_size, edit_button_size) self.attrs_button.setSizePolicy(fix_horizontal_size) self.attrs_button.clicked.connect(self.show_attrs_dialog) self.layout = QHBoxLayout() self.layout.addWidget(self.field_name_edit) self.layout.addWidget(self.field_type_combo) self.layout.addWidget(self.value_line_edit) self.layout.addWidget(self.nx_class_combo) self.layout.addWidget(self.edit_button) self.layout.addWidget(self.value_type_combo) self.layout.addWidget(self.units_line_edit) self.layout.addWidget(self.attrs_button) self.layout.setAlignment(Qt.AlignLeft) self.setLayout(self.layout) self.setFrameShadow(QFrame.Raised) self.setFrameShape(QFrame.StyledPanel) # Allow selecting this field widget in a list by clicking on it's contents self.field_name_edit.installEventFilter(self) if parent is not None: self._set_up_name_validator() self.field_name_edit.validator().is_valid.emit(False) self.value_line_edit.installEventFilter(self) self.nx_class_combo.installEventFilter(self) # These cause odd double-clicking behaviour when using an event filter so just connecting to the clicked() signals instead. self.edit_button.clicked.connect(self.something_clicked) self.value_type_combo.highlighted.connect(self.something_clicked) self.field_type_combo.highlighted.connect(self.something_clicked) # Set the layout for the default field type self.field_type_changed()
def __init__( self, node_parent, possible_fields=None, parent: QListWidget = None, parent_dataset: Dataset = None, hide_name_field: bool = False, show_only_f142_stream: bool = False, ): super(FieldWidget, self).__init__(parent) possible_field_names = [] self.default_field_types_dict = {} self.streams_widget: StreamFieldsWidget = None if possible_fields: possible_field_names, default_field_types = zip(*possible_fields) self.default_field_types_dict = dict( zip(possible_field_names, default_field_types)) self._show_only_f142_stream = show_only_f142_stream self._node_parent = node_parent self.edit_dialog = QDialog(parent=self) self.attrs_dialog = FieldAttrsDialog(parent=self) if self.parent() is not None and self.parent().parent() is not None: self.parent().parent().destroyed.connect(self.edit_dialog.close) self.parent().parent().destroyed.connect(self.attrs_dialog.close) self.field_name_edit = FieldNameLineEdit(possible_field_names) if self.default_field_types_dict: self.field_name_edit.textChanged.connect(self.update_default_type) self.hide_name_field = hide_name_field if hide_name_field: self.name = str(uuid.uuid4()) self.units_line_edit = QLineEdit() self.unit_validator = UnitValidator() self.units_line_edit.setValidator(self.unit_validator) self.units_line_edit.setMinimumWidth(20) self.units_line_edit.setMaximumWidth(50) unit_size_policy = QSizePolicy() unit_size_policy.setHorizontalPolicy(QSizePolicy.Preferred) unit_size_policy.setHorizontalStretch(1) self.units_line_edit.setSizePolicy(unit_size_policy) self.unit_validator.is_valid.connect( partial(validate_line_edit, self.units_line_edit)) self.units_line_edit.setPlaceholderText(CommonAttrs.UNITS) self.field_type_combo: QComboBox = QComboBox() self.field_type_combo.addItems([item.value for item in FieldType]) self.field_type_combo.currentIndexChanged.connect( self.field_type_changed) fix_horizontal_size = QSizePolicy() fix_horizontal_size.setHorizontalPolicy(QSizePolicy.Fixed) self.field_type_combo.setSizePolicy(fix_horizontal_size) self.value_type_combo: QComboBox = QComboBox() self.value_type_combo.addItems(list(VALUE_TYPE_TO_NP)) for i, item in enumerate(VALUE_TYPE_TO_NP.keys()): if item == ValueTypes.DOUBLE: self.value_type_combo.setCurrentIndex(i) break self.value_type_combo.currentIndexChanged.connect( self.dataset_type_changed) self.value_line_edit: QLineEdit = QLineEdit() self.value_line_edit.setPlaceholderText("value") value_size_policy = QSizePolicy() value_size_policy.setHorizontalPolicy(QSizePolicy.Preferred) value_size_policy.setHorizontalStretch(2) self.value_line_edit.setSizePolicy(value_size_policy) self._set_up_value_validator(False) self.dataset_type_changed(0) self.nx_class_combo = QComboBox() self.edit_button = QPushButton("Edit") edit_button_size = 50 self.edit_button.setMaximumSize(edit_button_size, edit_button_size) self.edit_button.setSizePolicy(fix_horizontal_size) self.edit_button.clicked.connect(self.show_edit_dialog) self.attrs_button = QPushButton("Attrs") self.attrs_button.setMaximumSize(edit_button_size, edit_button_size) self.attrs_button.setSizePolicy(fix_horizontal_size) self.attrs_button.clicked.connect(self.show_attrs_dialog) self.layout = QHBoxLayout() self.layout.addWidget(self.field_name_edit) self.layout.addWidget(self.field_type_combo) self.layout.addWidget(self.value_line_edit) self.layout.addWidget(self.nx_class_combo) self.layout.addWidget(self.edit_button) self.layout.addWidget(self.value_type_combo) self.layout.addWidget(self.units_line_edit) self.layout.addWidget(self.attrs_button) self.layout.setAlignment(Qt.AlignLeft) self.setLayout(self.layout) self.setFrameShadow(QFrame.Raised) self.setFrameShape(QFrame.StyledPanel) # Allow selecting this field widget in a list by clicking on it's contents self.field_name_edit.installEventFilter(self) existing_objects = [] emit = False if isinstance(parent, QListWidget): for i in range(self.parent().count()): new_field_widget = self.parent().itemWidget( self.parent().item(i)) if new_field_widget is not self and hasattr( new_field_widget, "name"): existing_objects.append(new_field_widget) elif isinstance(self._node_parent, Group): for child in self._node_parent.children: if child is not parent_dataset and hasattr(child, "name"): existing_objects.append(child) emit = True self._set_up_name_validator(existing_objects=existing_objects) self.field_name_edit.validator().is_valid.emit(emit) self.value_line_edit.installEventFilter(self) self.nx_class_combo.installEventFilter(self) # These cause odd double-clicking behaviour when using an event filter so just connecting to the clicked() signals instead. self.edit_button.clicked.connect(self.something_clicked) self.value_type_combo.highlighted.connect(self.something_clicked) self.field_type_combo.highlighted.connect(self.something_clicked) # Set the layout for the default field type self.field_type_changed()
def initUI(self): self.setWindowTitle('Image Tesselator') layout_container = QHBoxLayout() menu_layout = QVBoxLayout() button = QPushButton('Choose Picture') button.clicked.connect(self.selectFile) menu_layout.addWidget(button) generation_layout = QGridLayout() generation_layout.addWidget(QLabel("Generation Types"), 0, 0) generation_type = QComboBox() generation_type.addItems(["Random", "Highest Entropy"]) generation_type.activated[str].connect(self.update_generation_type) policy = QSizePolicy() policy.setHorizontalPolicy(QSizePolicy.Expanding) generation_type.setSizePolicy(policy) generation_layout.addWidget(generation_type, 0, 1) menu_layout.addLayout(generation_layout) points_layout = QGridLayout() points_layout.addWidget(QLabel("Point Count"), 0, 0) self.slider_field.setAlignment(Qt.AlignCenter) self.slider_field.setValidator(QIntValidator()) self.slider_field.textChanged[str].connect(self.update_points_field) self.slider_field.setText("0") points_layout.addWidget(self.slider_field, 0, 1) slider = QSlider(Qt.Horizontal) slider.setSingleStep(10) slider.setMinimum(0) slider.setMaximum(1000) slider.valueChanged[int].connect(self.update_points_slider) points_layout.addWidget(slider, 1, 0, 1, 2) menu_layout.addLayout(points_layout) menu_layout.addWidget(QPushButton('Generate Tesselation')) picture_viewer = QGridLayout() pixmap = QPixmap(240, 240) pixmap.fill(QColor(53, 53, 53)) self.original_pic.setPixmap(pixmap) self.point_line_pic.setPixmap(pixmap) self.tesselated_pic.setPixmap(pixmap) for i, pic in enumerate( [self.original_pic, self.point_line_pic, self.tesselated_pic]): picture_viewer.addWidget(pic, 0, i) for i, label in enumerate( ["Original", "Chosen Points & Triangles", "Tesselated"]): pic_label = QLabel(label) pic_label.setAlignment(Qt.AlignCenter) picture_viewer.addWidget(pic_label, 1, i) layout_container.addLayout(menu_layout) layout_container.addLayout(picture_viewer) self.setLayout(layout_container) self.show()