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

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


products:pussy:other:quick_start

Это старая версия документа!


Быстрый старт

Данная статья написана для разработчиков, в ней будет описан процесс разработки плагина на платформе PUSSY. Разработчик должен обладать знаниями и навыками разработки на Python и Qt, в данном случае будет использована привязка к инструментам Qt - PySide6.

Пишем свой плагин

О концепции Плагина читайте в статье. Если говорить коротко, то плагин это просто набор скриптов Python (пакет), который обязан иметь собственный графический интрефейс, в данном случае это класс виджета, который встраивается в окно Менеджера, за этим интерфейсом может скрываться совершенно любая реализация.

Для работы нам потребуется:

В PyCharm создайте новый проект, добавьте в нее папку PUSSY, и пометьте PyUB как Source Root, чтобы иметь возможность импортировать модули из данного пакета.

projectstructinpycharm.jpg

Пишем код плагина

Сделаем пробный плагин - кодовый замок, конечно, это просто игрушка для демонстрации и никаких полезных функций он не делает, но для объяснения основ сгодится.

Описание алгоритма: код от «замка» устанавливается через настройки, если код введен верно, то поле загорается зелеными, иначе – красным, поле блокируется на несколько секунд.

Посмотрим на плагин в общих чертах, по сути это пакет Python - папка, содержащая файл init. py, размещается она в папке manager/Plugins, либо во внешних директориях, указанных в настройках. В папке Plugins есть шаблон (папка Template) скопируйте его, когда будете писать свой плагин, переименуйте папку и файлы как посчитает нужным.

Внимание! Пакеты с именем Template игнорируются при загрузке.

В нашем случае плагин будет разделен на 4 файла (в исходных файла он находится в Plugins/Codelock): init.py – здесь будет производится регистрация класса с интерфейсом и размещается дополнительная информация, ничего более тут выполнять не нужно; View.py – здесь определен главный класс интерфейса; Settings.py – класс с настройками; ui_ form.py – код виджета, сгенерированный в QtDesigner. В зависимости от сложности плагина и предпочтений разработчиков структура может быть любая, но в каждом случае в файле init.py должная происводиться регистрация виджета плагина.

Так выглядит код View.py:

from PyUB.Types import UBWidget
from PySide6.QtWidgets import QPushButton
from .ui_form import Ui_Form
from .Settings import Settings
 
class CodeLock(UBWidget):
 
    ub_settings = Settings
 
    def __init__(self):
        super().__init__()
        self.ui = Ui_Form()
        self.ui.setupUi(self)
        self._init_gui()
 
        self._code = self.ub_settings.get_property_value("code")
 
    def _init_gui(self):
        for name in dir(self.ui):
            attr = getattr(self.ui, name)
            if type(attr) is QPushButton:
                attr.clicked.connect(self.on_btn)
        self.ui.lineEdit.setStyleSheet("")
        self.ui.lineEdit.textChanged.connect(self.text_changed)
        self.ui.lineEdit.setInputMask(self.ub_settings.get_property("code").p_input_mask)
 
    def on_btn(self):
        if not self.ui.lineEdit.isEnabled(): return
        s = self.sender()
        self.ui.lineEdit.setText(self.ui.lineEdit.text() + s.text())
 
    def text_changed(self, text):
        if len(text) == len(self._code):
            if text == self._code:
                self.ui.lineEdit.setStyleSheet(u"background-color: rgb(85, 255, 127);")
            else:
                self.ui.lineEdit.setStyleSheet(u"background-color: rgb(240, 54, 8);")
 
            self.ui.lineEdit.setEnabled(False)
            self.id = self.startTimer(5000)
 
    def timerEvent(self, event) -> None:
        self.ui.lineEdit.setStyleSheet("")
        self.ui.lineEdit.clear()
        self.ui.lineEdit.setEnabled(1)
 
        self.killTimer(self.id)
 
    def settings_edit_finished(self, changed:bool) -> None:
        if not changed: return
        self._code = self.ub_settings.get_property_value("code")
        self.ui.lineEdit.clear()

В данном коде определен класса интерфейса, также в нем описана вся логика программы, для крупных программ так делать не рекомендуется. Этот класс унаследован от UBWidget и его экземпляр будет встраиваться в окно Менеджера в качестве вкладки. Код в методе init() выполняется, когда пользователь перешел во вкладку, в которой размещается экземпляр данного класса, или при запуске Менеджера, если пользователь ранее активировал параметр «Инициализировать при запуске» ( init

on

startup).

В данном варианте бы определили следующие атрибуты и методы

:

Поля класса:

  • ub_ settings - (опционально) ссылка на класс с пользовательскими настройками (потомок UBPropertyContainer ), в нашем случае это класс MySettings.

Методы:

  • init( self) - инициализация виджета, в данном случае тут производится встраивание интерфейса, сгенерованного с помощью QtDesigner;

settings_ edit_ finished ( self, changed: bool) – (выполняется после завершения редактирования настроек, changed принимает значения: True – если хотя бы одно из свойств было изменено, иначе – False), если пользователь изменил код замка, то производится обновления поля _code, поле ввода очищается.

Подробнее о UBWidget здесь .

Перейдем к файлу с настройками ( Settings. py). Его код :

products/pussy/other/quick_start.1701004560.txt.gz · Последнее изменение: (внешнее изменение)