Инструменты пользователя

Инструменты сайта


products:pussy:concepts:property

Свойство

FIXME Кажется здесь чего-то не хватает. Думаю чем бы дополнить статью

Свойство - это компонент для хранения типизированных данных, а по факту это класс Python, который имеет графический интерфейс для отображения и редактирования хранимых данных и набор параметров, который определяет поведение Свойства. В составе Плагинов используется для хранения пользовательских настроек внутри Контейнера Свойств, но ничто не мешает использовать их в иных целях. Фреймворк PUSSY предлагает некоторое количество готовых свойств, но несложно разработать собственные свойства, следуя данному уроку.

Познакомимся с понятиями, которые характеризуют Свойства:

  • Значение – это важные данные, которые Свойство хранит в себе;
  • Параметры – это служебные данные, которые определяют поведение Свойства, по сути являются полями экземпляра класса свойства, их отличительной особенностью является то, что их имя как правило начинается с префикса «p_»;
  • Виджет – этот термин должен быть знаком разработчикам Qt приложений, поскольку это элемент графического интерфейса, через который пользователь производит манипуляции со значением.

Если рассуждать в парадигме MVC (Model View Controller (на русском: Модель Представление Контроллер)), то Свойство действует на уровнях модели и представления, тут есть один важный момент: виджет создается при обращении к специальному методу, также чтобы обновить значение Свойства требуется вызвать специальный метод.

property_scheme.jpg

Типы свойств

Свойства это классы Python, которые унаследованы от одного из 2-х базовых классов: с механизмом валидации значения (PropertyValidated) и без (Property).

PropertyValidated реализует механизм валидации значения, валидация происходит автоматически в соответствии с установленными параметрами при изменении значения свойства или параметров от которых он зависит. Приведу простой пример, есть свойство для ввода целых чисел (IntProperty), которое имеет параметры p_minimum, p_maximum, минимальное и максимальное значения соответственно, если IntProperty имеет значение равное 10, а p_minimum =1, p_maximum = 15, то при изменении p_maximum = 5, значение свойства будет равно 5. Этот механизм добавлен для того, чтобы значение свойства никогда не выходило за установленные пределы.

Дополнительную информацию читайте в материалах: Properties

Применение

Как и говорилось ранее, Свойства изначально задумывались для использования в составе Контейнера Свойств, чтобы поместить свойства в контейнер необходимо создать класс-потомок PropertyContainer, далее свойства записываются в теле класса в виде аннотаций

from PyUB.Types import PropertyContainer
 
class <Имя класса>(PropertyContainer):
    <имя свойства 1>:<Класс свойства>(<параметры>)
    <имя свойства 2>:<Класс свойства>(<параметры>)
 ...

Можно использовать свойства самостоятельно в стороннем Qt приложении. Чтобы создать экземпляр свойства нужно использовать команду:

<переменная> = <Класс свойства>(<параметры свойства>) #создаем экземпляр и сохраняем его в переменной

Затем вызвать у экземпляра свойства метод get_input_widget() , полученный виджет нужно будет встроить в свой интерфейс, ссылка на него будет сохранена в атрибуте _widget_ref, чтобы извлечь значение из виджета и обновить значение свойства нужно вызвать метод extract_widget_data(). Если нужно получить имя свойства следует вызвать метод get_name().

Конечно, можно найти Свойствам и другие применения, чтобы узнать больше о реализации читайте Справочник API

products/pussy/concepts/property.txt · Последнее изменение: ironmesh