QtQuickControls 2.0 与 PyQt5

QtQuickControls 2.0 with PyQt5

我设置了一个 virtualenv 并安装了 pyqt5 (PyQt5-5.7-cp35-cp35m-manylinux1_x86_64.whl):

virtualenv -p /usr/bin/python3.5 .
source bin/activate
pip install pyqt5

我创建了一个 basic.qml 文件:

import QtQuick 2.7
import QtQuick.Controls 2.0

Rectangle {
    width: 300
    height: 100
    color: "red"
}

并尝试将其加载到我的 python 代码中:

import sys
from PyQt5.QtCore import QUrl
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQuick import QQuickView

if __name__ == '__main__':
    myApp = QApplication(sys.argv)

    view = QQuickView()
    view.setSource(QUrl('basic.qml'))
    view.show()

    sys.exit(myApp.exec_())

它失败了

file:///[...]/main.qml:2:1: plugin cannot be loaded for module "QtQuick.Controls": Cannot load library /[virtualenv]/lib/python3.5/site-packages/PyQt5/Qt/qml/QtQuick/Controls.2/libqtquickcontrols2plugin.so: (libQt5QuickTemplates2.so.5: Can't open shared object file: File or directory not found) 
     import QtQuick.Controls 2.0 
     ^

Process finished with exit code 0

我查过了。它抱怨的这个文件实际上不存在。但是我该如何安装呢? PyQt5 完全支持 QtQuickControls2 吗?

如果我将 basic.qml 中的导入从 import QtQuick.Controls 2.0 切换为 import QtQuick.Controls 1.2,它会起作用。但是我想使用新控件。

这看起来像是 PyQt5 中的错误。该包裹缺少 libQt5QuickTemplates2.solibQt5QuickControls2.so

希望 PyQt 5.7 包中包含的 Qt 5.7 版本和 qt.io 上可用的官方 Qt 5.7 版本是以完全二进制兼容的方式构建的,一种可能是从下载并安装 Qt 5.7 qt.io,并将缺少的库复制到您的 virtualenv 中。例如:

$ cp ~/Qt/5.7/gcc_64/lib/libQt5QuickTemplates2.* path/to/lib/python3.5/site-packages/PyQt5/Qt/lib
$ cp ~/Qt/5.7/gcc_64/lib/libQt5QuickControls2.* path/to/lib/python3.5/site-packages/PyQt5/Qt/lib