axioma.gui.extension.
ToolControllerExtension
¶Класс расширений для плагинов, позволяющий добавлять инструменты с помощью пользовательского контроллера для работы с окнами в приложении. Отличие от базового класса - возможность передачи в конструктор иконки и подписи к создаваемому в контроллере действию.
Базовый класс:
От него наследуются:
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)
|