Встраивание окна Axioma в своё приложение.
Встраивание окна Axioma в своё приложение.
Добрый день.
Пробую встраивать возможности Axioma в своё приложение. Наткнулся на проблему инициализации приложения.
На этапе выполнения axioma.app.AxiomaApplication(sys.argv) возникает ошибка "could not find or load the Qt platform plugin windows".
Устанавливаю переменные окружения - QT_PLUGIN_PATH и QT_QPA_PLATFORM_PLUGIN_PATH. Ничего не меняется.
Решается или копирование qt.conf в папку со своим приложением и прописываением в файле пути до QTPlugin. Или копирование папки platforms в папку с приложением.
Оба пути не подходят как решение... подскажите, может у Вас есть решение этой проблемы?
Пробую встраивать возможности Axioma в своё приложение. Наткнулся на проблему инициализации приложения.
На этапе выполнения axioma.app.AxiomaApplication(sys.argv) возникает ошибка "could not find or load the Qt platform plugin windows".
Устанавливаю переменные окружения - QT_PLUGIN_PATH и QT_QPA_PLATFORM_PLUGIN_PATH. Ничего не меняется.
Решается или копирование qt.conf в папку со своим приложением и прописываением в файле пути до QTPlugin. Или копирование папки platforms в папку с приложением.
Оба пути не подходят как решение... подскажите, может у Вас есть решение этой проблемы?
Re: Встраивание окна Axioma в своё приложение.
А на чём приложение? На Qt/без? на питоне с Qt/без?
У вас свой интерпретатор Python или пользуетесь тем, что в Аксиоме? если свой - то какой версии
Пришлите минимальный пример, на котором проявляется ошибка.
У вас свой интерпретатор Python или пользуетесь тем, что в Аксиоме? если свой - то какой версии
Пришлите минимальный пример, на котором проявляется ошибка.
Re: Встраивание окна Axioma в своё приложение.
Пишем на Delphi. Используем Python Embed.
https://docs.python.org/3.7/extending/e ... on%20embed
Подготовлю пример.
https://docs.python.org/3.7/extending/e ... on%20embed
Подготовлю пример.
Re: Встраивание окна Axioma в своё приложение.
Добрый день.
Выложил по ссылке
https://yadi.sk/d/BUc4Etz_ehpoMg
Если убрать файл qt.conf, приложение не видит плагины.
Нижнее поле - лог выполнения.
PyDo - выполняемые команды, PIO - вывод питона. Env - установка окружения.
Верхняя кнопка, запуск Axioma.
Ниже - кнопка выполнения блока команд.
Ещё ниже, выполнение отдельной команды.
Как мы делаем в QGIS. Открываем окно карты QgsMapCanvas, и меняем Parent виндовой функцией SetParent.
Примерный код представлен ниже. map_hwnd ID окна который уже вставляем в своё окно.
К стати. Приложение почему то падает после запуска через минуту где то. Что происходит, не понятно.
Выложил по ссылке
https://yadi.sk/d/BUc4Etz_ehpoMg
Если убрать файл qt.conf, приложение не видит плагины.
Нижнее поле - лог выполнения.
PyDo - выполняемые команды, PIO - вывод питона. Env - установка окружения.
Верхняя кнопка, запуск Axioma.
Ниже - кнопка выполнения блока команд.
Ещё ниже, выполнение отдельной команды.
Как мы делаем в QGIS. Открываем окно карты QgsMapCanvas, и меняем Parent виндовой функцией SetParent.
Примерный код представлен ниже. map_hwnd ID окна который уже вставляем в своё окно.
К стати. Приложение почему то падает после запуска через минуту где то. Что происходит, не понятно.
Код: Выделить всё
# -*- coding: utf-8 -*-
import sys
from qgis.core import *
from qgis.gui import *
import gdal
import ogr
# create main window
canvas = QgsMapCanvas()
canvas.setCanvasColor(Qt.white)
canvas.enableAntiAliasing(True)
#canvas.useImageToRender(False)
#layer = QgsVectorLayer("d://85_region.shp", "a1", "ogr")
layer = QgsVectorLayer("D://TempUser//42_wgs//85_region.shp", "a1", "ogr")
#layer = QgsVectorLayer("D://TempUser//UNG//KPT//Участки.tab", "Участки", "ogr")
#file = QFileDialog.getOpenFileName(self,"Open", ".", "Shp(*.shp)")
#layer = QgsVectorLayer(file, "My Shape", "ogr")
if not layer.isValid():
print("Layer failed to load!")
else:
print("valid!")
QgsProject.instance().addMapLayer(layer);
canvas.setExtent(layer.extent())
# set the map canvas layer set
canvas.setLayers([layer])
canvas.setWindowFlags(Qt.SubWindow)
#| Qt.FramelessWindowHint
canvas.show()
extent = layer.extent()
canvas.setExtent(extent)
map_hwnd = int(canvas.effectiveWinId())
Последний раз редактировалось grig27 10 июн 2019, 09:51, всего редактировалось 2 раза.
Re: Встраивание окна Axioma в своё приложение.
Пытаюсь создать и показать окно карты.
Ошибка в coordsys.dll.
Как открыть окно карты, пока примера не нашёл...
Код: Выделить всё
# -*- coding: utf-8 -*-
import sys
import axioma.app
from PyQt5.QtCore import QRectF, QPointF
import gdal
import ogr
map = axioma.render.Map()
#print(map.effectiveWinId())
mapView = axioma.gui.MapView(map)
mapView.show()
print(mapView.effectiveWinId())
map_hwnd = mapView.effectiveWinId()
Как открыть окно карты, пока примера не нашёл...
Re: Встраивание окна Axioma в своё приложение.
При использовании бесплатной версии Аксиомы обязательно поднимать главное окно программы. Оно должно быть видимым. Такие условия.Приложение почему то падает после запуска через минуту где то. Что происходит, не понятно.
Аксиома не смогла показать Окно Карты MapView без КС. Добавьте слои c КС в Карту Map.Ошибка в coordsys.dll
Хорошая ошибка, спасибо. Мы проработаем этот момент, чтобы такого не происходило.
Попробуйте добавить путь к Qt плагинам через статический метод QCoreApplication::addLibraryPathqt.conf
до создания QApplication
https://doc.qt.io/qt-5/qcoreapplication ... ibraryPath
https://doc.qt.io/qt-5/deployment-plugi ... -directory
Re: Встраивание окна Axioma в своё приложение.
Статический метод сработал! Это уже хорошо.
Странно, но по идее это приравнивается к QT_QPA_PLATFORM_PLUGIN_PATH. Загадочный этот Qt... От версии к версии всё по разному.
Мы пробуем в новый Кадофис встроить возможности Аксиомы.
У Вас есть ещё RunTime версия Аксиомы.
Как нам поступать в дальнейшем... Какой режим более оптимален?
Странно, но по идее это приравнивается к QT_QPA_PLATFORM_PLUGIN_PATH. Загадочный этот Qt... От версии к версии всё по разному.
Мы пробуем в новый Кадофис встроить возможности Аксиомы.
У Вас есть ещё RunTime версия Аксиомы.
Как нам поступать в дальнейшем... Какой режим более оптимален?
Re: Встраивание окна Axioma в своё приложение.
Для использования Аксиомы без главного окна программы:
- разработчикам требуется приобрести платную лицензию Аксиомы.
- для распространения и активации программы требуются лицензии рантайм.
Re: Встраивание окна Axioma в своё приложение.
Напишите на ...
Отредактировано модератором: убрал почту
Отредактировано модератором: убрал почту
Re: Встраивание окна Axioma в своё приложение.
Создал главное окно, встроил в своё окно. Всё вроде бы отображается, но всё равно падает через некоторое время. Без встраивания, всё работает нормально(вроде бы:-)).