Класс Plugin

Модули рекомендуется писать в объектном стиле. Для этого точка входа __init__.py должна содержать класс Plugin. Тогда ГИС «Аксиома» при загрузке модуля создаст его экземпляр, а при выгрузке - уничтожит его.

Вспомогательный класс axipy.AxiomaPlugin и его базовый класс axipy.AxiomaInterface содержат свойства и функции, необходимые почти для любого плагина. Например, загрузка/сохранение настроек settings, получение файлов внутри папки с модулем local_file(), перевод строк tr(), добавление кнопок в интерфейс create_action и другое.

Пример модуля __init__.py

"""Пример добавления кнопки и подключение действия по нажатию на нее
(показ сообщения). При выгрузке кнопка удаляется из интерфейса.
Также добавим существующую в аксиоме кнопку сдвига карты.
"""
from PySide2.QtWidgets import QMessageBox
from axipy import AxiomaPlugin


class Plugin(AxiomaPlugin):
    def load(self):
        self.__action = self.create_action('Пример действия',
                icon='://icons/share/32px/run.png', on_click=self.show_message)
        position = self.get_position('Основные', 'Команды')
        position.add(self.__action)
        self.__system_action_pan = self.create_system_action('Pan')
        position.add(self.__system_action_pan)

    def unload(self):
        self.__action.remove()
        self.__system_action_pan.remove()

    def show_message(self):
        QMessageBox.information(None, 'Сообщение',
                'Пример выполнения действия по нажатию кнопки')
  • При загрузке Аксиома создаст экземпляр модуля и вызовет метод load().

  • unload() - вызывается, когда модуль выгружается.

Важно

При наследовании от axipy.AxiomaPlugin не используйте методы базового класса в конструкторе __init__. Помещайте логику инициализации в метод load(). Это необходимо для правильной работы базового класса.

Внимание

Не рекомендуется, начиная с версии 3.5.

Инициализация модуля через «внедрение зависимостей» продолжает работать, но не рекомендуется в пользу наследования (описан выше). При внедрении зависимостей класс Plugin не наследуется ни от чего, а в конструктор принимается параметр iface - экземпляр класса axipy.AxiomaInterface.

class Plugin:
    def __init__(self, iface):
        self.__action = iface.menubar.create_button('Пример действия',
                icon='://icons/share/32px/run.png', on_click=self.show_message)
        ...