ToolControllerExtension

class axioma.gui.extension.ToolControllerExtension

Класс расширений для плагинов, позволяющий добавлять инструменты с помощью пользовательского контроллера для работы с окнами в приложении. Отличие от базового класса - возможность передачи в конструктор иконки и подписи к создаваемому в контроллере действию.

Базовый класс:

От него наследуются:

  • BasicToolExtension

    ToolControllerExtension(factory, actionid, category="", tab="", group="", icon=None, text=None)

    Конструктор класса.

    Параметры:
    • factory – Callable объект, который при вызове принимает аргумент parent типа QObject и возвращает объект класса управления инструментом, наследованный от ToolController.
    • actionid (str) – Идентификатор инструмента в ленточном интерфейсе
    • category (str) – Идентификатор категории в ленточном интерфейсе
    • tab (str) – Идентификатор вкладки в ленточном интерфейсе
    • group (str) – Идентификатор группы в ленточном интерфейсе
    • icon (QIcon) – Иконка для QAction инструмента
    • text (str) – Текст для QAction инструмента

Пример использования:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from PyQt5.QtGui import QMouseEvent, QIcon
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QMessageBox
from axioma.gui import *
import axioma.gui.extension
from axioma.core.plugin import *

'''
Пример реализации простейшего инструмента для карты в виде расширения с пользовательским контроллером.
Контроллер может давать возможность дополнительно управлять доступностью инструмента.
По нажатию левой кнопки мыши выводятся координаты на карте.
'''

# Определяем свой класс инструмента
class ExampleTool(Tool):

    def mousePressEvent(self, event):
        if event.button() != Qt.LeftButton:
            return
        posOnMap = self.widget().viewport().mapToScene(event.pos()) # Преобразуем координаты из окна в координаты карты
        mess="Координаты точки карты:\n ({}, {})".format(posOnMap.x(), posOnMap.y()) # выводим полученную координату
        QMessageBox.information(axioma.app.mainWindow, "Информация", mess)
        return Tool.PassEvent

# Определяем контроллер для создания нашего инструмента
class ExampleToolController(axioma.gui.extension.ToolController):
    def __init__(self, parent=None):
        super().__init__( axioma.gui.MapView, parent) # Только для карт

# Переопределяем метод создания инструмента
    def createTool(self, widget):
        return ExampleTool(widget)

#  Если мы хотим дополнительно управлять доступностью инструмента для окна
#    def isEnabledFor(self, widget):
#        return True

# Регистрируем расширение в системе.
ext = axioma.gui.extension.ToolControllerExtension(ExampleToolController, "ExampleToolId", icon=QIcon("://icons/32px/info.png"), text="Координаты точки карты")
axioma.app.gui.prependExtension(ext)

# Добавляем инструмент в закладку карты
ribbonExt = axioma.gui.extension.RibbonExtension()
ribbonExt.addAction("ExampleToolId", "map", "operations")
axioma.app.gui.prependExtension(ribbonExt)