【问题标题】:Pyinstaller: How to include QML file for a simple Pyside + QML Application?Pyinstaller:如何为简单的 Pyside + QML 应用程序包含 QML 文件?
【发布时间】:2012-09-13 01:04:53
【问题描述】:

我在使用 Pyinstaller 生成 exe 时遇到问题。我最大的问题应该是“包括 qml 文件”。我尝试了很多,但仍然失败。希望有人能告诉我应该如何编写规范文件以包含 QML。

一般来说,我想要的是从我的 Pyside+QML 应用程序创建一个 Windows Exe。但是怎么做呢?

main.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
from PySide.QtCore import *
from PySide.QtGui import *
from PySide.QtDeclarative import QDeclarativeView

# Create Qt application and the QDeclarative view
app = QApplication(sys.argv)
view = QDeclarativeView()
# Create an URL to the QML file
url = QUrl('view.qml')
# Set the QML file and show
view.setSource(url)
view.setResizeMode(QDeclarativeView.SizeRootObjectToView)
view.show()
# Enter Qt main loop
sys.exit(app.exec_())

view.qml

import QtQuick 1.0

Rectangle {
    width: 200
    height: 200
    color: "red"

    Text {
        text: "Hello World"
        anchors.centerIn: parent
    }
}

【问题讨论】:

  • 可以包含qml文件,但QtDeclarative是PyInstaller的not supported
  • 我确实通过 a.datas 在 spec 文件中包含了 qml 文件。可能还不支持。那么 cx_freeze 是否是这样做的替代方案?
  • 也许……我没用过cx_freeze,所以我不太清楚。

标签: pyqt pyqt4 qml pyinstaller qt-quick


【解决方案1】:

不确定 PySide,但 PyInstaller 从 2.1 开始支持 PyQt5。我假设一般程序是相似的。

对于 PyQt5,将 qml 文件放入资源文件中,然后使用 pyrcc5 (pyside-rcc) 进行编译。然后导入生成的 python 模块,PyInstaller 会像对待任何其他模块一样对待它。

也可以直接包含 qml 文件。通过这样做:

extrafiles = [('myfile.qml', os.path.join('path', 'to', 'myfile.qml'), 'DATA')]

...

coll = COLLECT( exe,
               a.binaries + extralibs,
               a.zipfiles,
               a.datas + extrafiles,
               ...

您可能还需要从qmake -query QT_INSTALL_QML 返回的 qml 目录中打包 qml 库。

【讨论】:

  • @glennr :我正在尝试打包 pyqt5 应用程序,而我的最终 exe 依赖于 qml 库。你能告诉我如何打包 qml 库吗?提前致谢。
猜你喜欢
  • 1970-01-01
  • 2021-08-18
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多