====== Свойство ====== FIXME Кажется здесь чего-то не хватает. Думаю чем бы дополнить статью Свойство - это компонент для хранения типизированных данных, а по факту это класс Python, который имеет графический интерфейс для отображения и редактирования хранимых данных и набор параметров, который определяет поведение Свойства. В составе [[:products:pussy:concepts:plugin|Плагинов ]] используется для хранения пользовательских настроек внутри [[:products:pussy:concepts:propertycontainer|Контейнера Свойств]], но ничто не мешает использовать их в иных целях. Фреймворк PUSSY предлагает некоторое количество [[:products:pussy:api:pyub:types:properties:main|готовых свойств]], но несложно разработать собственные свойства, следуя данному [[:products:pussy:other:dev_custom_property|уроку]]. Познакомимся с понятиями, которые характеризуют Свойства: * **Значение **– это важные данные, которые Свойство хранит в себе; * **Параметры **– это служебные данные, которые определяют поведение Свойства, по сути являются полями экземпляра класса свойства, их отличительной особенностью является то, что их имя как правило начинается с префикса "**p_**"; * **Виджет **– этот термин должен быть знаком разработчикам Qt приложений, поскольку это элемент графического интерфейса, через который пользователь производит манипуляции со значением. Если рассуждать в парадигме MVC (Model View Controller (на русском: Модель Представление Контроллер)), то Свойство действует на уровнях модели и представления, тут есть один важный момент: виджет создается при обращении к специальному методу, также чтобы обновить значение Свойства требуется вызвать специальный метод. {{ :products:pussy:screenshots:concepts:property_scheme.jpg?400 |property_scheme.jpg}} ===== Типы свойств ===== Свойства это классы Python, которые унаследованы от одного из 2-х базовых классов: с механизмом валидации значения ([[:products:pussy:api:pyub:types:properties:propertyvalidated|]]) и без ([[:products:pussy:api:pyub:types:properties:property|]]). [[:products:pussy:api:pyub:types:properties:propertyvalidated|]] реализует механизм валидации значения, валидация происходит автоматически в соответствии с установленными параметрами при изменении значения свойства или параметров от которых он зависит. Приведу простой пример, есть свойство для ввода целых чисел ([[:products:pussy:api:pyub:types:properties:intproperty|]]), которое имеет параметры //p_minimum, p_maximum//, минимальное и максимальное значения соответственно, если [[:products:pussy:api:pyub:types:properties:intproperty|]] имеет значение равное 10, а //p_minimum =1, p_maximum = 15//, то при изменении //p_maximum = 5, // значение свойства будет равно 5. Этот механизм добавлен для того, чтобы значение свойства никогда не выходило за установленные пределы. Дополнительную информацию читайте в материалах: [[:products:pussy:api:pyub:types:properties:main|]] ===== Применение ===== Как и говорилось ранее, Свойства изначально задумывались для использования в составе [[:products:pussy:concepts:propertycontainer|Контейнера Свойств]], чтобы поместить свойства в контейнер необходимо создать класс-потомок [[:products:pussy:api:pyub:types:propertycontainer|]], далее свойства записываются в теле класса в виде аннотаций from PyUB.Types import PropertyContainer class <Имя класса>(PropertyContainer): <имя свойства 1>:<Класс свойства>(<параметры>) <имя свойства 2>:<Класс свойства>(<параметры>) ... Можно использовать свойства самостоятельно в стороннем Qt приложении. Чтобы создать экземпляр свойства нужно использовать команду: <переменная> = <Класс свойства>(<параметры свойства>) #создаем экземпляр и сохраняем его в переменной Затем вызвать у экземпляра свойства метод //[[http://wiki.mig-ironmesh.ru/products;pussy;api;pyub;types;properties;abstractproperty#get_input_widget|get_input_widget()]]// , полученный виджет нужно будет встроить в свой интерфейс, ссылка на него будет сохранена в атрибуте //_widget_ref//, чтобы извлечь значение из виджета и обновить значение свойства нужно вызвать метод //[[http://wiki.mig-ironmesh.ru/products;pussy;api;pyub;types;properties;abstractproperty#extract_widget_data|extract_widget_data()]]. // Если нужно получить имя свойства следует вызвать метод //[[http://wiki.mig-ironmesh.ru/products;pussy;api;pyub;types;properties;abstractproperty#get_name|get_name()]]//. Конечно, можно найти Свойствам и другие применения, чтобы узнать больше о реализации читайте [[:products:pussy:api:pyub:main|Справочник API]]