Pyside2 qml返回一个空风

2024-10-03 06:26:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用QML与pyside2,但在一些问题上运行。 我创建了一个简单的例子来说明我遇到的问题。 我在Qt Design Studio中创建了一个新的qml项目,并试图在pyside2中加载qml文件,但是当我运行脚本时,它返回一个空窗口。你知道吗

我尝试将qml移动到与我的相同的级别主.py但我得到了同样的结果。 我的树结构是这样的。你知道吗

这是我演讲的内容主.py你知道吗

from PySide2.QtWidgets import QApplication
from PySide2.QtQuick import QQuickView
from PySide2.QtCore import QUrl
from PySide2.QtGui import QGuiApplication
import sys

path = 'qmlTest01/qmlTest01.qml'
app = QGuiApplication(sys.argv)
view = QQuickView()
url = QUrl.fromLocalFile(path)

view.setSource(url)
view.show()
app.exec_()

我看到一扇空窗,像这样:

而不是这样:

先谢谢你。你知道吗

我用这个例子做了回购: https://bitbucket.org/aespid/tests/src


Tags: pathfrompyimportviewappsysqml
1条回答
网友
1楼 · 发布于 2024-10-03 06:26:14

说明:

您的项目结构如下:

├── main.py
└── qmlTest01
    ├── imports
    │   ├── qmlTest01
    │   │   └── ...
    │   └── QtQuick
    │       └── ...
    ├── qmlTest01.qml
    ├── qmlTest01.qmlproject
    ├── qtquickcontrols2.conf
    └── Screen01.ui.qml

在您的进口产品中,您使用:

import qmlTest01 1.0
// ...

但是,您没有指明该库的位置,但是对于第二个映像,您必须从QtCreator运行.qmlproject,它读取以下配置:

/* File generated by Qt Creator */

import QmlProject 1.1

Project {
    mainFile: "qmlTest01.qml"

    /* ... */

    Files {
        filter: "qmldir"
        directory: "."
    }

    Environment {
        QT_QUICK_CONTROLS_CONF: "qtquickcontrols2.conf"
        QT_AUTO_SCREEN_SCALE_FACTOR: "1"
    }

    /* List of plugin directories passed to QML runtime */
    importPaths: [ "imports" ]

    /* Required for deployment */
    targetDirectory: "/opt/qmlTest01"
}

其中指出了导入其他模块的路径。你知道吗

解决方案:

解决方案是用操作系统环境()和使用QQmlEngine的addImportPath()的“imports”文件夹的路径:

import os
import sys

from PySide2.QtCore import QUrl
from PySide2.QtGui import QGuiApplication
from PySide2.QtQuick import QQuickView


if __name__ == "__main__":

    current_dir = os.path.dirname(os.path.realpath(__file__))

    os.environ["QT_QUICK_CONTROLS_CONF"] = os.path.join(
        current_dir, "qmlTest01", "qtquickcontrols2.conf"
    )
    os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"

    app = QGuiApplication(sys.argv)
    view = QQuickView()
    import_path = os.path.join(current_dir, "qmlTest01", "imports")
    view.engine().addImportPath(import_path)

    filename = os.path.join(current_dir, "qmlTest01", "qmlTest01.qml")
    url = QUrl.fromLocalFile(filename)

    view.setSource(url)
    view.show()
    app.exec_()

相关问题 更多 >