WidgetManagerService - Менеджер виджетов ========================================= .. currentmodule:: axioma.gui .. class:: WidgetManagerService .. note:: Абстрактный Менеджер виджетов Унаследован от: * :class:`~PyQt5.QtCore.QObject` Методы: .. method:: registerWidget(widget) Заренистрировать виджет в менеджере :param widget: виджет :type widget: :class:`~PyQt5.QtWidgets.QWidget` .. method:: count() :return: количество всех виджетов :rtype: :class:`int` .. method:: count(type) Количество виджетов заданного типа :param type: тип :type type: :class:`~PyQt5.QtCore.QMetaObject` :return: количество :rtype: :class:`int` .. method:: allWidgets() Список всех виджетов :return: список виджетов :rtype: :class:`list` [:class:`~PyQt5.QtWidgets.QWidget`] .. method:: allWidgets(type) Список виджетов заданного типа :param type: тип :type type: :class:`~PyQt5.QtCore.QMetaObject` :return: список виджетов :rtype: :class:`list` [:class:`~PyQt5.QtWidgets.QWidget`] .. method:: connectWidgetCountChanged(type, context, callback) Подписаться на изменение количества виджетов определенного типа :param type: тип виджетов, за количеством которых нужно следить :type type: :class:`type` :param context: отвечает за время жизни соединения :type context: :class:`~PyQt5.QtCore.QObject` :param callback: вызываемый метод при изменении количества виджетов; должен принимать ноль или один параметр типа :class:`int` и возвращать :any:`None` :type callback: :any:`typing.Callable` [[:class:`int`], :any:`None`] .. code-block:: python3 from axioma.gui import MapView, ItemView widgetManager = axioma.app.gui.widgetManager # без параметров callbackMap = lambda: print("Number of MapViews has changed") widgetManager.connectWidgetCountChanged(MapView, None, callbackMap) # с параметром callbackItem = lambda itemview_count: print("ItemViews: ", itemview_count) widgetManager.connectWidgetCountChanged(ItemView, None, callbackItem) .. method:: connectWidgetChanged(type, context, callback) Подписаться на изменение текущего виджета определенного типа :param type: тип виджета, об изменении которого неоходимо узнать :type type: :class:`type` :param context: отвечает за время жизни соединения :type context: :class:`~PyQt5.QtCore.QObject` :param callback: вызываемый метод при смене виджета заданного типа; должен принимать ноль или один параметр типа :class:`~PyQt5.QtWidgets.QWidget` и возвращать :any:`None` :type callback: :any:`typing.Callable` [[:class:`~PyQt5.QtWidgets.QWidget`], :any:`None`] .. code-block:: python3 from PyQt5.QtWidgets import QWidget widgetManager = axioma.app.gui.widgetManager callbackChanged = lambda: print("Current widget changed") widgetManager.connectWidgetChanged(QWidget, None, callbackChanged) .. method:: connectCurrentWidget(type, signal, context, callback) Подписаться на сигнал активного виджета. При его смене произойдет переподключение нового активного виджета :param type: тип виджета, за сигналом которого нужно следить :type type: :class:`type` :param signal: сигнал :type signal: :class:`PyQt5.QtCore.pyqtSignal` :param context: отвечает за время жизни соединения :type context: :class:`~PyQt5.QtCore.QObject` :param callback: вызываемый метод при смене виджета заданного типа; должен быть совместим с сигналом :type callback: :any:`typing.Callable` .. code-block:: python3 from axioma.gui import MapView from PyQt5.QtWidgets import QPushButton widgetManager = axioma.app.gui.widgetManager callbackZoomChanged = lambda zoom: print("Zoom is changed: ", zoom) # guard контроллирует время жизни соединения guard = QPushButton("Disconnect") guard.setAttribute(Qt.WA_DeleteOnClose) guard.clicked.connect(guard.close) guard.show() widgetManager.connectCurrentWidget(MapView, MapView.zoomChanged, guard, callbackZoomChanged) .. method:: removeWidget(widget) Убрать виджет из менеджера :param widget: виджет :type widget: :class:`~PyQt5.QtWidgets.QWidget` .. method:: activateWidget(widget) Активировать виджет :param widget: виджет :type widget: :class:`~PyQt5.QtWidgets.QWidget`