axioma.gui.
NativeActionControllerExtension
¶Класс-расширение для объектов класса NativeActionController
. Обеспечивает регистрацию в системе в виде расширения
Унаследован от: NativeActionExtension
От него наследуются: ActionControllerExtension
NativeActionControllerExtension
(controller, actionid="", ribbonInfo=None, parent=None)¶Конструктор
Параметры:
- controller (
ActionController
) – Созданный ранее контроллер, который необходимо зарегистрировать в системе- actionid (
str
) – Идентификатор действия в ленточном интерфейсе- ribbonInfo (
RibbonActionInfo
) – Положение в ленточном интерфейсе- parent (
QObject
или None) – Родительский объект
actionController
()¶Зарегистрированный за этим расширением контроллер
Тип результата: ActionController
Пример использования:
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 46 47 48 49 50 51 52 53 54 55 | import sys
import axioma.gui.extension
import PyQt5.QtGui
import PyQt5.QtCore
'''
NativeActionControllerExtension используется для регистрации пользовательского действия в системе. При этом есть возможность изменении состояния в зависимости от окружения среды.
Другими словами если необходимо создать кнопку на панели инструментов, при этом реализовать возможность управления ее доступностью, необходимо использовать данный подход.
'''
# Объявим расширение для действия с возможностью управления доступностью и режима переключателя
class MyActionControllerExtension(axioma.gui.NativeActionControllerExtension):
def __init__(self, actionControllerFactory, actionId, icon, text, slot, checkable = False):
controller = actionControllerFactory()
controller.setCheckable(checkable)
super().__init__(controller, actionId, axioma.gui.RibbonActionInfo())
self.__icon = icon
self.__text = text
self.__slot = slot
# Необходимо переопределить метод customizeAction, задав параметры для создаваемого объекта QAction
def customizeAction(self, action):
action.setText(self.__text)
action.setIcon(self.__icon)
action.triggered.connect(self.__slot)
# Доступность. Отправляется всем созданным в рамках данного расширения действиям. Вызов необходимо производить после регистрации расширения в системе посредством gui.prependExtension
def setEnabled(self, v):
self.actionController().enableChanged.emit(v)
def setChecked(self, v): # Утоплено
self.actionController().checkedChanged.emit(v)
def myTriggered(): # внешний обработчик
print ('Нажали кнопку')
# Добавляем action в систему в закладку карты и категорию инструментов
ribbonExt = axioma.gui.extension.RibbonExtension()
actionExt = MyActionControllerExtension(axioma.gui.NativeActionController, "ControllerActionId", PyQt5.QtGui.QIcon(":/icons/32px/run.png"), "Тестовое действие", myTriggered)
axioma.app.gui.prependExtension(actionExt)
ribbonExt.addAction("ControllerActionId", "map", "tools")
axioma.app.gui.prependExtension(ribbonExt)
# В качестве примера подключим контроллер к каталогу данных. Если в каталоге есть таблицы, действие доступно. Если он пуст - нет.
# Нужно отметить, что для более корректной работы для этих целей лучше использовать пользовательский контроллер на базе axioma.gui.NativeActionController
# (переопределить свой контроллер на базе axioma.gui.NativeActionController).
catalog = axioma.app.mainWindow.dataCatalog()
def onUpdatedCatalog():
actionExt.setEnabled(len(catalog.allDataObjects()))
onUpdatedCatalog()
catalog.updated.connect(onUpdatedCatalog)
|