Мне нужен совет о том, как указывать пути к моему QML и ресурсам (значок) в моем простом приложении QtQuick QML Python на KDE. Единственный связанный с этим вопрос, который я нашел здесь, был: Развернуть проект Qt на linux
Мой вопрос другой. Моя единственная цель для развертывания моего приложения - KDE; поэтому мне не нужно связывать библиотеки Qt, и у моего приложения нет других зависимостей. Мне нужно только развернуть мои файлы python и QML и значок приложения (png).
Еще одна проблема заключается в том, что в будущем я хочу иметь возможность предоставлять определенные обновления только через файлы QML. Я планирую извлечь sh, при необходимости, один новый файл QML без необходимости развертывания новой версии приложения.
Это наводит меня на мысль, что я должен не использовать Система ресурсов Qt. Однако, не имея никакого опыта работы с этой системой или с развертыванием приложений в целом, я обращаюсь за советом.
Я не хочу жестко кодировать путь к моей иконке и основному файлу QML в моем главном .py файл при развертывании. Кроме того, следующий код не дает мне местоположение ни одного из файлов моего приложения:
QCoreApplication.applicationDirPath()
Возвращает /usr/bin
(местоположение python), которое не подходит для моего файла QML. или значок приложения.
Как найти свой QML и файлы ресурсов в исполняемом методе __main__
?
Вот мой main.py:
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QUrl
from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5.QtGui import QIcon
if __name__ == '__main__':
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
engine.load(QUrl.fromLocalFile('view.qml'))
app.setWindowIcon(QIcon('appicon.png'))
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec_())
Вот мой view.qml
import QtQuick.Window 2.2
import QtQuick 2.2
import QtQuick.Controls 2.14
Window {
id: root
visible: true
width: 640
height: 480
title: qsTr("Hello World")
}
Этот код работает, когда я выполняю python main.py
из локального каталога. Однако, если я разверну свои python, qml и файлы значков, скажем, /usr/local/bin
, мне придется жестко закодировать этот путь в файл python следующим образом.
engine.load(QUrl.fromLocalFile('/usr/local/bin/view.qml'))
app.setWindowIcon(QIcon('/usr/local/bin/appicon.png'))
Я не хочу этого делать . Я ищу другие альтернативы, не связанные с жестким кодированием пути.
Этот вопрос не касается упаковки, определяемой дистрибутивом c. Предположим, что я буду использовать что-то вроде обсуждаемого метода "generi c" здесь - например, сценарий оболочки (и предположим, что у пользователя, устанавливающего программу, будут права sudo).