ToolControllerExtension ======================== .. currentmodule:: axioma.gui.extension .. class:: ToolControllerExtension Класс расширений для плагинов, позволяющий добавлять инструменты с помощью контроллера для работы с окнами в приложении. Базовый класс: * :class:`~axioma.core.plugin.Extension` От него наследуются: * :class:`~axioma.gui.extension.BasicToolExtension` Методы: .. method:: ToolControllerExtension(factory, actionid, category="", tab="", group="", icon=None, text=None ) Конструктор класса. :param factory: Callable объект, который при вызове принимает аргумент parent типа :class:`~PyQt5.QtCore.QObject` и возвращает объект класса управления инструментом, наследованный от :class:`~axioma.gui.ToolController`. :param actionid: Идентификатор инструмента в ленточном интерфейсе :type actionid: :class:`str` :param category: Идентификатор категории в ленточном интерфейсе :type category: :class:`str` :param tab: Идентификатор вкладки в ленточном интерфейсе :type tab: :class:`str` :param group: Идентификатор группы в ленточном интерфейсе :type group: :class:`str` :param icon: Иконка для :class:`~PyQt5.QtWidgets.QAction` инструмента :type icon: :class:`~PyQt5.QtGui.QIcon` :param text: Текст для :class:`~PyQt5.QtWidgets.QAction` инструмента :type text: :class:`str` Пример использования: .. code-block:: python # Пример инструмента с поддержкой возможности привязки к координатам ''' class MySnapTool(axioma.gui.SnapTool): def __init__(self, view, gsm): super().__init__(view, gsm) # Переопределяем нажатие на клавишу мыши def mousePressEvent(self, event): try: # Если нажали левую клавишу мыши if (event.button() == Qt.LeftButton): # Координаты сцены по нажатию currentPoint = self.scenePoint() # Исправленные координаты snapped = self.snapPoint() sourcePointMess = 'Исходная точка {} {}'.format(currentPoint.x(), currentPoint.y()) snapPointMess = 'Исправленная точка {} {}'.format(snapped.x(), snapped.y()) QMessageBox.information(axioma.app.mainWindow, "Результат", sourcePointMess + '\n' + snapPointMess) except Exception as ex: print(ex) finally: return super().mousePressEvent(event) # Определяем контроллер для создания нашего инструмента class MySnapToolController(axioma.gui.extension.DrawingToolController): def __init__(self, parent=None): super().__init__( parent) # Переопределяем метод создания инструмента def createTool(self, widget): return MySnapTool(widget, self.guiSettingsManager()) def createMyExtensions(): # Получаем ссылку на существующий интерфейс приложения ribbonExt = axioma.gui.extension.RibbonExtension() # Создаем новую группу в панели карты ribbonExt.addGroup("map","SnapGroupId", "Узлы") ribbonExt.addAction("MySnapTool", "map", "SnapGroupId") # Создаем расширение на базе ранее определенного контроллера toolExt = axioma.gui.extension.ToolControllerExtension(MySnapToolController, "MySnapTool", icon=QIcon("://icons/16px/snap_geometries.png"), text="Пример инструмента со SNAP") return [ribbonExt, toolExt]