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

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


products:pussy:other:quick_start

Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:pussy:other:quick_start [2023/11/26 16:16] – [Пишем код плагина] ironmeshproducts:pussy:other:quick_start [2023/12/13 14:54] (текущий) – внешнее изменение 127.0.0.1
Строка 5: Строка 5:
 ===== Пишем свой плагин ===== ===== Пишем свой плагин =====
  
-О концепции Плагина читайте в [[:products:pussy:concepts:plugin|статье]]. Если говорить коротко, то плагин это просто набор скриптов Python (пакет), который обязан иметь собственный графический интрефейс, в данном случае это класс виджета, который встраивается в окно Менеджера, за этим интерфейсом может скрываться совершенно любая реализация.+О концепции Плагина читайте в [[:products:pussy:concepts:plugin|статье]]. Если говорить коротко, то плагин это просто набор скриптов Python (пакет), который обязан иметь собственный графический интерфейс, в данном случае это класс виджета, который встраивается в окно Менеджера, за этим интерфейсом может скрываться совершенно любая реализация.
  
-Для работы нам потребуется:+Для работы нам потребуется:\\ 
 +* Python3;
  
-  * Python3; 
   * PySide6;   * PySide6;
-  * Инструмент для написания кода (я предпочитаю IDE [[:products:pussy:other:main|PyCharm]]]]);+  * Инструмент для написания кода (я предпочитаю IDE [[:products:pussy:other:main|PyCharm]]);
   * [[https://github.com/iron-mesh/utilities-box|исходный код PUSSY]] .   * [[https://github.com/iron-mesh/utilities-box|исходный код PUSSY]] .
  
Строка 18: Строка 18:
 {{  :products:pussy:screenshots:projectstructinpycharm.jpg?400  |projectstructinpycharm.jpg}} {{  :products:pussy:screenshots:projectstructinpycharm.jpg?400  |projectstructinpycharm.jpg}}
  
-==== Пишем код плагина ====+==== Пишем код ====
  
 Сделаем пробный плагин - кодовый замок, конечно, это просто игрушка для демонстрации и никаких полезных функций он не делает, но для объяснения основ сгодится. Сделаем пробный плагин - кодовый замок, конечно, это просто игрушка для демонстрации и никаких полезных функций он не делает, но для объяснения основ сгодится.
Строка 24: Строка 24:
 Описание алгоритма: код от «замка» устанавливается через настройки, если код введен верно, то поле загорается зелеными, иначе – красным, поле блокируется на несколько секунд. Описание алгоритма: код от «замка» устанавливается через настройки, если код введен верно, то поле загорается зелеными, иначе – красным, поле блокируется на несколько секунд.
  
-Посмотрим на плагин в общих чертах, по сути это пакет Python - папка, содержащая файл // initpy//, размещается она в папке **manager/Plugins**, либо во внешних директориях, указанных в настройках. В папке **Plugins **  есть шаблон (папка **Template**) скопируйте его, когда будете писать свой плагин, переименуйте папку и файлы как посчитает нужным.+Посмотрим на плагин в общих чертах, по сути это пакет Python - папка, содержащая файл // _ _initpy_ _//, размещается она в папке **manager/Plugins**, либо во внешних директориях, указанных в настройках. В папке **Plugins **  есть шаблон (папка **Template**)скопируйте его, когда будете писать свой плагин, переименуйте папку и файлы как посчитаете нужным.
  
 <WRAP center round important 60%> <WRAP center round important 60%>
Строка 30: Строка 30:
 //Внимание! Пакеты с именем //**// Template //  **//игнорируются при загрузке.//</WRAP> //Внимание! Пакеты с именем //**// Template //  **//игнорируются при загрузке.//</WRAP>
  
-В нашем случае плагин будет разделен на 4 файла (в исходных файла он находится в **Plugins/Codelock**): // init.py//  – здесь будет производится регистрация класса с интерфейсом и размещается дополнительная информация, ничего более тут выполнять не нужно; //View.py//  – здесь определен главный класс интерфейса; //Settings.py//  – класс с настройками; //ui_ form.py//  – код виджета, сгенерированный в [[:products:pussy:other:qtdesigner|QtDesigner]]. В зависимости от сложности плагина и предпочтений разработчиков структура может быть любая, но в каждом случае в файле  //init.py // должная происводиться регистрация виджета плагина.+В нашем случае плагин будет разделен на 4 файла (в исходные файлы находятся в **Plugins/Codelock**): //_ _ init_ _.py//  – здесь будет производится регистрация класса с интерфейсом и размещается дополнительная информация, ничего более тут выполнять не нужно; //View.py//  – здесь определен главный класс интерфейса; //Settings.py//  – класс с настройками; //ui_ form.py//  – код виджета, сгенерированный в [[:products:pussy:other:qtdesigner|QtDesigner]]. В зависимости от сложности плагина и предпочтений разработчиков структура может быть любая, но в каждом случае в файле //_ _init.py_ _ //  должна производиться регистрация виджета плагина.
  
 Так выглядит код //View.py//: Так выглядит код //View.py//:
Строка 87: Строка 87:
         self._code = self.ub_settings.get_property_value("code")         self._code = self.ub_settings.get_property_value("code")
         self.ui.lineEdit.clear()         self.ui.lineEdit.clear()
 +
  
 </code> </code>
  
-В данном коде определен класса интерфейса, также в нем описана вся логика программы, для крупных программ так делать не рекомендуется. Этот класс унаследован от **UBWidget ** и его экземпляр будет встраиваться в окно Менеджера в качестве вкладки. Код в методе //__// // +В данном коде определен класса интерфейса, также в нем описана вся логика программы, для крупных программ так делать не рекомендуется. Этот класс унаследован от **UBWidget **  и его экземпляр будет встраиваться в окно Менеджера в качестве вкладки. Код в методе //_ _init_ _ () //  выполняется, когда пользователь перешел во вкладку, в которой размещается экземпляр данного класса, или при запуске Менеджера, если пользователь ранее активировал параметр «Инициализировать при запуске» (init on startup).
-init__() // выполняется, когда пользователь перешел во вкладку, в которой размещается экземпляр данного класса, или при запуске Менеджера, если пользователь ранее активировал параметр «Инициализировать при запуске» ( +
-init+
  
-on+В данном варианте бы определили следующие атрибуты и методы:
  
-startup).+Поля класса:
  
-В данном варианте бы определили следующие атрибуты и методы+  * //ub_ //// settings //- (опционально) ссылка на класс с пользовательскими настройками (потомок **[[:products:pussy:other:propertycontainer|PropertyContainer]]**), в нашем случае это класс **[[:products:pussy:other:mysettings|Settings]]**. 
 +Методы:
  
-:+  * //__init__  ( //// self) //- инициализация виджета, в данном случае тут производится встраивание интерфейса, сгенерованного с помощью [[:products:pussy:other:qtdesigner|QtDesigner]]; 
 +  * //settings_ //// edit_ //// finished ( //// self, //// changed: //// bool) //– (выполняется после завершения редактирования настроек, changed принимает значения: True – если хотя бы одно из свойств было изменено, иначе – False), если пользователь изменил код замка, то производится обновления поля //_code//, поле ввода очищается. 
 +Подробнее о **UBWidget**  [[:products:pussy:api:pyub:types:ubwidget|здесь]] .
  
-Поля класса:+Перейдем к файлу с настройками ( //Settings.py//). Его код :
  
-  *  // +<code python> 
-ub_ // // +from PyUB.Types import PropertyContainer 
-settings //- (опционально) ссылка на **__класс__**  с пользовательскими настройками (потомок ** +from PyUB.Types.Properties import StringProperty
-UBPropertyContainer **), в нашем случае это класс **MySettings**.+
  
-Методы:+class Settings(PropertyContainer): 
 +    code: StringProperty(default_value="12345", input_mask="00000000", name="Код") 
 + 
 + 
 +</code>
  
-  * //__// // +Тут определено всего одно свойство для ввода строки. Подробнее о контейнере свойств и самих свойствах смотрите в материалах: [[:products:pussy:concepts:property|]], [[:products:pussy:concepts:propertycontainer|]], [[:products:pussy:api:pyub:types:propertycontainer|]].
-init__( // // +
-self) //- инициализация виджета, в данном случае тут производится встраивание интерфейсасгенерованного с помощью QtDesigner; +
-  *+
  
-// +Итак, все важные классы мы уже определили, теперь нужно сообщить Менеджеру какой класс нужно устанавливать. Для этого в модуле //[[:products:pussy:api:pyub:utils|]]// есть функция //register_ubwidget()//, в нее надо передать ссылку на класс-потомок **UBWidget**в плагине можно зарегистрировать только один класс, это действие нужно выполнить в файле //_ _init.py_ _//. Также в этом файле по желанию можно определить дополнительную информацию о плагине, создать переменную //ub_info//  ={…}это типичный словарь, допускаются ключи и значения только строкового типа, в таблице ниже показан пример оформления, некоторые пункты могут быть исключены по желанию.
-settings_ // // +
-edit_ // // +
-finished ( // // +
-self // // +
-changed: // // +
-bool)  //– (выполняется после завершения редактирования настроек, changed принимает значения: True – если хотя бы одно из свойств было изменено, иначе – False), если пользователь изменил код замка, то производится обновления поля //_code//, поле ввода очищается.+
  
-Подробнее о **UBWidget** [[products:pussy:api:pyub:types:ubwidget|здесь]] .+| |**Ключ** |**Пример значения** |**Описание** | 
 +|1  |description  |“Этот плагин выводит спутник на орбиту”|Описание плагина. Дайте емкое и лаконичное описание плагина. Например, для чего он предназначен и т.д.| 
 +|2  |author  |"Иван Иванов"|Имя автора| 
 +|3  |author_webpage  |“[[http://www.ironmesh.ru|www.ironmesh.ru]]”  |Веб-страница автора| 
 +|4  |author_email  |“ivan_ivanov@mail.com” дрес электронной почты автора| 
 +|5  |version  |“1.3.4”  |Версия плагина| 
 +|6  |wiki_url  |“ivan_ivanov.wiki.com”  |Ссылка на страницу вики|
  
-Перейдем к файлу с настройками +Подведем итоги. В данной статье я дал необходимы сведения касательно разработки собственных плагинов, как вы можете убедиться, в этом нет ничего сложного, при наличии опыта разработки с применение перечисленных технологийБолее подробную информацию ищите в других разделах вики. Если чтоо осталось неясным, то можете задать свои вопросы в [[https://discord.gg/JD5yKPrKCk|Discord]].
-Settings. +
-py). Его код +
-:+
  
  
products/pussy/other/quick_start.1701004560.txt.gz · Последнее изменение: (внешнее изменение)