Плагины

Вопросы связанные с работой ГИС Аксиома
Аватара пользователя
Дмитрий
Сообщения: 62
Зарегистрирован: 04 июн 2019, 08:33

Re: Плагины

Сообщение Дмитрий » 02 апр 2024, 13:02

gisamap писал(а): 02 апр 2024, 12:38 Насколько я понимаю речь идет о меню при нажатии на правую кнопку мыши
Результат будет такой:
Изображение
Вложения
Screenshot_20240402_155911_popup.png
Screenshot_20240402_155911_popup.png (96.28 КБ) 859 просмотров
Аватара пользователя
Матвеич
Сообщения: 79
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 02 апр 2024, 13:16

Дмитрий ! Благодарю Вас !!!
Буду пробовать !!!
Аватара пользователя
Матвеич
Сообщения: 79
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 02 апр 2024, 17:08

Доброго времени суток "Gismap"

Активное окно ,с Вашей помощью, я сумел отследить ,а отследить(извлечь) имена и количество таблиц активного окна не сумел.


примечание: Смог определить количество и имена всех открытых таблиц во всех окнах.
Аватара пользователя
Матвеич
Сообщения: 79
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 03 апр 2024, 06:42

Доброго времени суток Форумчане !!!

Как отследить (извлечь) имена и количество таблиц активного окна , открытого средствами ГИС Аксиома.
(окон с открытыми разными таблицами может быть несколько)

попробовал применить :

23.2 ListLayers - Список слоев карты
class axipy.ListLayers
Группа слоев. Может включать в себя как слои axipy.Layer так и группы слоев
axipy.ListLayers. Пример использования см axipy.Map.layers
Свойства:
count Количество слоев и групп слоев.

выдает ошибку : не определена count.

p.s. как правильно составить операнд.
Аватара пользователя
gisamap
Сообщения: 217
Зарегистрирован: 18 окт 2019, 08:03

Re: Плагины

Сообщение gisamap » 03 апр 2024, 07:00

Добрый день.
act_map_view=view_manager.active
''' layers - слои активного окна '''
layers=act_map_view.map.layers
count_layer=layers.count
for layer in layers:
print(layer..title)
Аватара пользователя
Дмитрий
Сообщения: 62
Зарегистрирован: 04 июн 2019, 08:33

Re: Плагины

Сообщение Дмитрий » 03 апр 2024, 07:17

Здравствуйте!
Матвеич писал(а): 03 апр 2024, 06:42 Доброго времени суток Форумчане !!!

Как отследить (извлечь) имена и количество таблиц активного окна , открытого средствами ГИС Аксиома.
(окон с открытыми разными таблицами может быть несколько)

Code: Select all

import axipy

# Количество таблиц
print(axipy.view_manager.active.map.layers.count)
# Перечень таблиц (через свойство data_object)
for layer in axipy.view_manager.active.map.layers:
print(layer.data_object.name)
Аватара пользователя
Матвеич
Сообщения: 79
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 03 апр 2024, 10:16

Уважаемые Форумчане : Александр, Дмитрий, Андрей, gismap !!!

Я Благодарен Вам за помощь !!!!
Мое изучение Python API в среде ГИС Аксиома происходит по алгоритму: мой вопрос ? Ваш ответ.
И Ваши ответы гораздо понятнее и логичнее ,чем Руководство разработчика .

.... "axipy.view_manager" - об этом в руководстве ни словечка ...(только фрагменты в примерах - понимай как хочешь...)

Надеюсь на новую редакцию "Руководства разработчика"

Еще раз примите мои уверения в совершеннейшем к Вам почтении.
Аватара пользователя
gisamap
Сообщения: 217
Зарегистрирован: 18 окт 2019, 08:03

Re: Плагины

Сообщение gisamap » 03 апр 2024, 10:28

https://axioma-gis.ru/axipy/dev-guide/5 ... r.mapviews
Примечание

Используйте готовый экземпляр этого класса view_manager
Аватара пользователя
Матвеич
Сообщения: 79
Зарегистрирован: 09 янв 2024, 11:43

Re: Плагины

Сообщение Матвеич » 05 апр 2024, 11:04

Доброго времени суток!

Вероятно этот дополнительный вопрос к Вам Дмитрий!

Относительно создания пользовательского пункта меню при нажатии правой кнопки мыши в активном окне.
Вставил операнды в свой модуль :


class MapTopik(Plugin):
def __init__(self) -> None:
self.menu = axipy.view_manager.active.widget.findChild(PySide2.QtWidgets.QMenu)
self.menu.addAction("Закрыть таблицы активного окна", lambda: self.closew())

self._title: str = self.tr("MapTopik")
self._action1: ActionButton = ActionButton(
title=self.tr("Открыть землю"),
on_click=self.zml_open
)
position = Position(tr("Основные"), tr("Команды"))
position.add(self._action1)
.......................................
.......................................
def unload(self) -> None:

self._action1.remove()
self._action2.remove()
...................................

запускаю плагин

открыто два окошка с таблицами. Кликаем правую кнопку мыши - есть пользовательский пункт меню :"Закрыть таблицы активного окна"
, работает корректно. Активизируем другое окно и кликаем правую кнопку мыши - пусто , пункта меню "Закрыть таблицы активного окна" - нет.
Возвращаемся на первое окно и кликаем правую кнопку - пункт меню "Закрыть таблицы активного окна" - есть.
При отключении моего модуля "MapTopik" в диалоговом окне "Модули" , раздел "Установлено" . пункт меню "Закрыть таблицы активного окна"
, при нажатии правой кнопки мыши остается.
как дективировать , закрыть этот пункт меню , при закрытии моего модуля.
Аватара пользователя
Дмитрий
Сообщения: 62
Зарегистрирован: 04 июн 2019, 08:33

Re: Плагины

Сообщение Дмитрий » 10 апр 2024, 07:53

Здравствуйте!

Прошу прощения за задержку.

Данная функция добавления меню в окно недокументирована и добавляет только в текущее окно. Для того, чтобы оно добавлялось во все окна, нужно позаботиться дополнительно.
Или же при переключении активного окна "перекидывать" его на новое текущее окно.

В данном примере создаваемое действие перебрасывается в контекстное меню при изменении активного окна.

Code: Select all

import typing

import axipy as axp
from PySide2 import QtCore as Qc
from PySide2 import QtWidgets as Qw


class ExamplePluginContextMenu(axp.Plugin):
def __init__(self) -> None:
self._action: typing.Optional[Qw.QAction] = None

def load(self) -> None:
self._action = Qw.QAction(self.tr('Закрыть таблицы активного окна'))
self._action.triggered.connect(self.closew)

axp.view_manager.active_changed.connect(self.on_active_changed)
self.on_active_changed()

def unload(self) -> None:
self._action.deleteLater()

def on_active_changed(self):
if isinstance(axp.view_manager.active, axp.MapView):
menu = axp.view_manager.active.widget.findChild(Qw.QMenu)
if not menu.actions():
Qc.QTimer.singleShot(100, self.on_active_changed)
return
if self._action not in menu.actions():
menu.insertAction(menu.actions()[-1], self._action)

def closew(self) -> None:
print('closew')
Ответить