products:pussy:other:dev_propertycontainer_gui
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| products:pussy:other:dev_propertycontainer_gui [2023/12/09 16:33] – [Решаем задачу] ironmesh | products:pussy:other:dev_propertycontainer_gui [2023/12/13 14:54] (текущий) – внешнее изменение 127.0.0.1 | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ====== Разработка интерфейса для Контейнера Свойств ====== | ====== Разработка интерфейса для Контейнера Свойств ====== | ||
| - | FIXME | ||
| - | В данном уроке я расскажу как разработать альтернативный интерфейс для Контейнера свойств, | + | В данном уроке я расскажу как разработать альтернативный интерфейс для |
| {{ : | {{ : | ||
| Строка 10: | Строка 9: | ||
| ===== Ставим задачу ===== | ===== Ставим задачу ===== | ||
| - | Для начала разберемся с тем, что мы хотим получить. Допустим у нас есть перечень свойств, | + | Для начала разберемся с тем, что мы хотим получить. Допустим у нас есть перечень свойств, |
| ===== Решаем задачу ===== | ===== Решаем задачу ===== | ||
| Строка 36: | Строка 35: | ||
| </ | </ | ||
| + | |||
| заметьте, | заметьте, | ||
| - | {{ : | + | {{ : |
| + | |||
| + | Напомню, | ||
| + | |||
| + | Итак, в итоге у меня получился следующий код для методов// | ||
| + | |||
| + | |||
| + | <code python> | ||
| + | @classmethod | ||
| + | def render_layout(cls) -> QToolBox: | ||
| + | cls._lable_list = {} | ||
| + | cls._tool_box = QToolBox() | ||
| + | |||
| + | def render_page(suffix: | ||
| + | scroll_area = QScrollArea() | ||
| + | scroll_area.setWidgetResizable(True) | ||
| + | widget_content = QWidget() | ||
| + | layout = QFormLayout(widget_content) | ||
| + | layout.setVerticalSpacing(15) | ||
| + | layout.setLabelAlignment(Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) | ||
| + | row: int = 0 | ||
| + | for key, prop in cls.__annotations__.items(): | ||
| + | if not key.endswith(suffix): | ||
| + | cls._lable_list[key] = QLabel() | ||
| + | cls._lable_list[key].setWordWrap(True) | ||
| + | layout.setWidget(row, | ||
| + | layout.setWidget(row, | ||
| + | row += 1 | ||
| + | scroll_area.setWidget(widget_content) | ||
| + | return scroll_area | ||
| + | |||
| + | for i in range(1, 6): | ||
| + | cls._tool_box.addItem(render_page(f" | ||
| + | |||
| + | return cls._tool_box | ||
| + | |||
| + | @classmethod | ||
| + | def retranslate(cls) -> None: | ||
| + | for key, label in cls._lable_list.items(): | ||
| + | label.setText(cls.get_property(key).get_name()) | ||
| + | cls.__annotations__[key].retranslate() | ||
| + | |||
| + | for i in range(cls._tool_box.count()): | ||
| + | cls._tool_box.setItemText(i, | ||
| + | </ | ||
| + | |||
| + | А вот так выглядит новый интерфейс, уже намного лучше. Это только один из вариант группировки свойств по разделам, также можно для таких целей использовать виджеты: | ||
| + | |||
| + | В методе // | ||
| + | |||
| + | Подытожу все вышесказанное. Для того чтобы определить свой вариант интерефейса нужно переопределить всего 2 метода:// | ||
| - | Ну, вот и все, урок по разработке | + | Ну, вот и все, урок по разработке |
products/pussy/other/dev_propertycontainer_gui.1702128809.txt.gz · Последнее изменение: (внешнее изменение)