Классический вид

Вопросы связанные с работой ГИС Аксиома
Аватара пользователя
Alex_Y
Сообщения: 33
Зарегистрирован: 26 янв 2021, 06:40

Классический вид

Сообщение Alex_Y » 10 мар 2022, 16:31

Здравствуйте.
Подскажите, как работать с классическим видом?
Если я добавляю группы, в ленточном меню, при переходе в классический, все элементы выводятся списком, и в меню, и в одной панели инструментов.
1. Как программно создать, подменю?
2. Как в меню добавить линию разделителя?
3. Как добавить команду только в меню, не включая ее в панель инструментов (типа команды Сохранить копию и пр.)?
4. Как в одно приложение добавить несколько своих панелей инструментов?
Аватара пользователя
Дмитрий
Сообщения: 56
Зарегистрирован: 04 июн 2019, 08:33

Re: Классический вид

Сообщение Дмитрий » 11 мар 2022, 14:40

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

У нас базовым является ленточный интерфейс, а классический формируется по общему принципу построения интерфейса.

По пунктам:
1. Подменю добавляется в меню модули по указанному наименованию вкладки, если такое имя отсутствует в интерфейсе (пример ниже). Если есть, то в него.

Код: Выделить всё

position = Position('Пользователькое', '') # Добавляется подменю в меню "Модули" и далее действия заносятся в нее
position = Position('Таблица', '') # Для занесения действий используется существующий пункт меню
2. К сожалению, разделители на данный момент не включены в релиз. Будут позже.
3. Если иконка для действия отсутствует, оно не добавляется в панель инструментов. Только в меню.
4. См. пример ниже (формируются две панели инструментов).

Код: Выделить всё

from axipy import AxiomaPlugin, Position
from axipy.app import mainwindow
from PySide2.QtWidgets import QAction

class Plugin(AxiomaPlugin):
    def load(self):
        self.__action1 = self.create_action('Пример действия 1', icon='://icons/share/32px/run3.png', on_click=self.on_clicked)
        self.__action2 = self.create_action('Пример действия 2', icon='://icons/share/32px/run3.png', on_click=self.on_clicked)
        self.__action3 = self.create_action('Пример действия без создания кнопки', on_click=self.on_clicked)
        position1 = Position('Пользователькое1', '')
        #position1 = Position('Таблица', '')
        position1.add(self.__action1)

        
        position1.add(self.__action2)
        position1.add(self.__action3)
        self.__action4 = self.create_action('Пример действия 3', icon='://icons/share/32px/run3.png', on_click=self.on_clicked)
        position2 = Position('Пользователькое2', '')
        position2.add(self.__action4)

    def unload(self):
        self.__action1.remove()
        self.__action2.remove()
        self.__action3.remove()
        self.__action4.remove()

    def on_clicked(self):
        print('Clicked')
Аватара пользователя
Alex_Y
Сообщения: 33
Зарегистрирован: 26 янв 2021, 06:40

Re: Классический вид

Сообщение Alex_Y » 14 мар 2022, 10:07

Спасибо за разъяснения.

А еще подскажите, как в плагине создать свое плавающее ui окно с использованием axipy? Можно в том же примере, что вы написали выше.
А то уже весь мозг себе сломал. Просто в скрипте выводит, а в плагине никак не разберусь.
Аватара пользователя
gisamap
Сообщения: 195
Зарегистрирован: 18 окт 2019, 08:03

Re: Классический вид

Сообщение gisamap » 14 мар 2022, 11:34

Добрый день.
ui окно - диалога ?
Аватара пользователя
Alex_Y
Сообщения: 33
Зарегистрирован: 26 янв 2021, 06:40

Re: Классический вид

Сообщение Alex_Y » 14 мар 2022, 12:29

Просто форма. Это не совсем диалог, это окно, которое не блокирует работу аксиомы и его можно прикрепить к разным сторонам основного окна.
Пример, открытые данные, Окна, Управление слоями и пр.
Аватара пользователя
gisamap
Сообщения: 195
Зарегистрирован: 18 окт 2019, 08:03

Re: Классический вид

Сообщение gisamap » 14 мар 2022, 13:07

Можно рассмотреть в качестве примера https://github.com/kasim73/TileServices форма поднимается в правой панели
Аватара пользователя
gisamap
Сообщения: 195
Зарегистрирован: 18 окт 2019, 08:03

Re: Классический вид

Сообщение gisamap » 14 мар 2022, 13:11

Как я понял из документации https://axioma-gis.ru/axipy/dev-guide/l ... tool-panel разработчики ввели ActiveToolPanel специально для этих целей
Аватара пользователя
Дмитрий
Сообщения: 56
Зарегистрирован: 04 июн 2019, 08:33

Re: Классический вид

Сообщение Дмитрий » 14 мар 2022, 14:53

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

Прилагаю пример. В нем два варианта:

1,
on_clicked - это мы используем форму *.ui, которую можно сделать посредством внешней программы, именуемой qtdesigner. Мы ее не поставляем, но можно попробовать взять с неофициального сайта.
https://build-system.fman.io/qt-designer-download

2.
on_clicked_2 - элементы управления добавляются программно.


Код: Выделить всё

from axipy import AxiomaPlugin, Position
from axipy.app import mainwindow
from PySide2.QtWidgets import QDockWidget, QWidget, QPushButton, QLineEdit, QVBoxLayout
from PySide2.QtCore import Qt
from PySide2.QtGui import QIcon

from PySide2.QtUiTools import QUiLoader
import os

class Plugin(AxiomaPlugin):
    def load(self):
        self.__action = self.create_action('Пример действия1',
                icon='://icons/share/32px/run3.png', on_click=self.on_clicked)
        position = Position('Основные', 'Команды')
        position.add(self.__action)
        self.dock = None

    def unload(self):
        self.__action.remove()
        if self.dock != None:
            mainwindow.remove_dock_widget(self.dock)
            self.dock = None

    def on_clicked(self):
        if self.dock == None:
            self.dock = QDockWidget(self.tr('Пример панели'))
            widget = QWidget()
            uiFile = os.path.join(os.path.dirname(__file__), "form.ui")
            self.__ui = QUiLoader().load(uiFile, widget)
            self.__ui.pushButton.clicked.connect(lambda: print('Clicked'))
            self.dock.setWidget(widget)
            mainwindow.add_dock_widget(self.dock, Qt.RightDockWidgetArea)


    def on_clicked_2(self):
        if self.dock == None:
            self.dock = QDockWidget(self.tr('Пример панели'))
            widget = QWidget()
            button = QPushButton("Кнопка")
            button.clicked.connect(lambda: print('Реакция на кнопку'))
            edit = QLineEdit("текст")
            layout = QVBoxLayout()
            layout.addWidget(button)
            layout.addWidget(edit)
            layout.addStretch()
            widget.setLayout(layout)
            self.dock.setWidget(widget)
            mainwindow.add_dock_widget(self.dock, Qt.RightDockWidgetArea)
            edit.setFocus()
Вложения
sample.zip
(1.48 КБ) 138 скачиваний
Аватара пользователя
Alex_Y
Сообщения: 33
Зарегистрирован: 26 янв 2021, 06:40

Re: Классический вид

Сообщение Alex_Y » 15 мар 2022, 05:06

Вся информация оказалась полезна.
Спасибо всем, разобрался :)
Аватара пользователя
Alex_Y
Сообщения: 33
Зарегистрирован: 26 янв 2021, 06:40

Re: Классический вид

Сообщение Alex_Y » 15 мар 2022, 17:15

В результате экспериментов появились следующие проблемы:

На панели появился инструмент, который в окне модулей отключен, но при загрузке он всегда появляется. Он ни на какие действия не реагирует и удаляться не хочет.
Каким способом его можно найти и удалить?

Также, при запуске моего модуля, в нижнем правом углу появляется сообщение "Действие с именем <имя моего инструмента> уже существует в системе. ...".
Что бы это значило и как это исправить?
Ответить