我需要关于如何在KDE上的简单QtQuick QML Python应用程序中指定QML和资源(图标)的路径的建议。我在这里找到的唯一相关问题是:Deploy a Qt project on linux
我的问题不同。我部署应用程序的唯一目标是KDE;因此,我不需要捆绑Qt库,我的应用程序也没有其他依赖项。我只需要部署python和QML文件以及一个应用程序图标(png)
另一个问题是,在将来,我希望能够仅通过QML文件提供某些更新。我计划在需要时推出一个新的QML文件,而不必部署新版本的应用程序
这让我相信我不应该使用Qt资源系统。然而,由于缺乏使用该系统或部署应用程序的经验,我寻求建议
我不想在部署时对main.py文件中的图标和主QML文件的路径进行硬编码。此外,以下代码没有提供我的任何应用程序文件的位置:
QCoreApplication.applicationDirPath()
它返回/usr/bin
(python的位置),该位置不适合我的QML文件或应用程序图标
如何在正在执行的__main__
方法中找到QML和资源文件?
这是我的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和icon文件部署到/usr/local/bin
,我必须将该路径硬编码到python文件中,如下所示
engine.load(QUrl.fromLocalFile('/usr/local/bin/view.qml'))
app.setWindowIcon(QIcon('/usr/local/bin/appicon.png'))
我不想这样做。我正在寻找其他不涉及硬编码路径的替代方案
这个问题与特定于分销的包装无关。假设我将使用类似here讨论的“通用”方法——例如shell脚本(并假设安装用户将拥有sudo权限)
本例中的想法是使用相对于主元素的相对路径创建绝对路径。例如,在本例中,您可以使用main.py目录路径(可以通过对此答案提供的解决方案获得:How do I get the path and name of the file that is currently executing?)来获得其他路径
相关问题 更多 >
编程相关推荐