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

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


products:pussy:concepts:property

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:pussy:concepts:property [2023/11/27 19:32] ironmeshproducts:pussy:concepts:property [2023/12/14 15:56] (текущий) ironmesh
Строка 1: Строка 1:
 ====== Свойство ====== ====== Свойство ======
  
-FIXME+<WRAP center round tip 60%> 
 +FIXME Кажется здесь чего-то не хватает. Думаю чем бы дополнить статью</WRAP>
  
-Свойство - это компонент для хранения типизированных данных, а по факту это класс Python, который предоставляет по запросу элемент графического интерфейса для отображения и редактирования хранимых данных. В составе [[:products:pussy:concepts:plugin|Плагинов ]]для PUSSY используется для хранения пользовательских настроек внутри [[:products:pussy:concepts:propertycontainer|Контейнера Свойства]], также ничто не мешает использовать их в любых целях. Фреймворк PUSSY предлагает некоторое количество [[:products:pussy:api:pyub:types:properties:main|готовых свойств]].+ 
 +Свойство - это компонент для хранения типизированных данных, а по факту это класс Python, который имеет графический интерфейс для отображения и редактирования хранимых данных и набор параметров, который определяет поведение Свойства. В составе [[:products:pussy:concepts:plugin|Плагинов ]] используется для хранения пользовательских настроек внутри [[:products:pussy:concepts:propertycontainer|Контейнера Свойств]], но ничто не мешает использовать их в иных целях. Фреймворк PUSSY предлагает некоторое количество [[:products:pussy:api:pyub:types:properties:main|готовых свойств]], но несложно разработать собственные свойства, следуя данному [[:products:pussy:other:dev_custom_property|уроку]].
  
 Познакомимся с понятиями, которые характеризуют Свойства: Познакомимся с понятиями, которые характеризуют Свойства:
  
-  * **Значение **– это важные данные, которые Свойство хранить в себе; +  * **Значение **– это важные данные, которые Свойство хранит в себе; 
-  * **Параметры **– это служебные данные, которые определяют поведение Свойства, по сути являются полями экземпляра класса свойства, их отличительной особенностью является то, что их имя как правило начинается на "**p_**"; +  * **Параметры **– это служебные данные, которые определяют поведение Свойства, по сути являются полями экземпляра класса свойства, их отличительной особенностью является то, что их имя как правило начинается с префикса "**p_**"; 
-  * **Виджет **– этот термин должен быть знаком разработчикам Qt приложений, это элемент графического интерфейса, через который пользователь производит манипуляции со значением.+  * **Виджет **– этот термин должен быть знаком разработчикам Qt приложений, поскольку это элемент графического интерфейса, через который пользователь производит манипуляции со значением.
 Если рассуждать в парадигме MVC (Model View Controller (на русском: Модель Представление Контроллер)), то Свойство действует на уровнях модели и представления, тут есть один важный момент: виджет создается при обращении к специальному методу, также чтобы обновить значение Свойства требуется вызвать специальный метод. Если рассуждать в парадигме MVC (Model View Controller (на русском: Модель Представление Контроллер)), то Свойство действует на уровнях модели и представления, тут есть один важный момент: виджет создается при обращении к специальному методу, также чтобы обновить значение Свойства требуется вызвать специальный метод.
  
-{{  :products:pussy:screenshots:concepts:property_scheme.jpg?400  }}+{{  :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|]]).+Свойства это классы Python, которые унаследованы от одного из 2-х базовых классов: с механизмом валидации значения ([[:products:pussy:api:pyub:types:properties:propertyvalidated|]]) и без ([[:products:pussy:api:pyub:types:properties:property|]]).
  
-[[:products:pussy:api:pyub:types:properties:propertyvalidated|]] реализует механизмы валидации значения, согласно установленным параметрам, валидация происходит автоматически при изменении самого свойства или параметровот которых он зависит. Приведу простой пример, есть свойство для ввода целых чисел (IntProperty), которое имеет параметры //p_minimum, p_maximum//, минимальное и максимальное значения соответственно. Если IntProperty имеет значение равное 10, а //p_minimum =1, p_maximum = 15//, то при изменении //p_maximum = 5, // значение свойства будет равно 5. Это механизм добавлен для того, чтобы значение свойства никогда не выходило за установленные пределы.+[[: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. Этот механизм добавлен для того, чтобы значение свойства никогда не выходило за установленные пределы.
  
 <WRAP center round tip 60%> <WRAP center round tip 60%>
Строка 24: Строка 26:
 Дополнительную информацию читайте в материалах: [[:products:pussy:api:pyub:types:properties:main|]] Дополнительную информацию читайте в материалах: [[:products:pussy:api:pyub:types:properties:main|]]
  
-</WRAP> +</WRAP> 
 + 
 +===== Применение ===== 
 + 
 +Как и говорилось ранее, Свойства изначально задумывались для использования в составе [[:products:pussy:concepts:propertycontainer|Контейнера Свойств]], чтобы поместить свойства в контейнер необходимо создать класс-потомок [[:products:pussy:api:pyub:types:propertycontainer|]], далее свойства записываются в теле класса в виде аннотаций 
 + 
 +<code python> 
 +from PyUB.Types import PropertyContainer 
 + 
 +class <Имя класса>(PropertyContainer): 
 +    <имя свойства 1>:<Класс свойства>(<параметры>
 +    <имя свойства 2>:<Класс свойства>(<параметры>
 + ... 
 + 
 + 
 +</code> 
 + 
 +Можно использовать свойства самостоятельно в стороннем Qt приложении. Чтобы создать экземпляр свойства нужно использовать команду: 
 + 
 +<code python> 
 +<переменная> = <Класс свойства>(<параметры свойства>) #создаем экземпляр и сохраняем его в переменной 
 + 
 + 
 +</code> 
 + 
 +Затем вызвать у экземпляра свойства метод //[[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]] 
 + 
products/pussy/concepts/property.1701102742.txt.gz · Последнее изменение: (внешнее изменение)