from PySide2.QtWidgets import QApplication
from PySide2.QtQuick import QQuickView
from PySide2.QtCore import QUrl, QObject, Signal, Slot
if __name__== "__main__":
app = QApplication([])
view = QQuickView()
url = QUrl("view.qml")
view.setSource(url)
root = view.rootContext()
这会出现错误:
Traceback (most recent call last):
File "test.py", line 14, in <module>
root = view.rootContext()
AttributeError: 'PySide2.QtQuick.QQuickView' object has no attribute 'rootContext'
看起来文档中确实有这样的内容:
最佳答案
我通过做一些不同的事情来解决这个问题。我最终还使用了 pip Pyside2 与 ROS apt Pyside2 软件包,但这(大部分)是不相关的。
from PySide2 import QtCore, QtGui, QtQml
from PySide2.QtCore import (
QUrl,
QObject,
Signal,
Slot,
QCoreApplication,
Property,
)
if __name__ == '__main__':
app = QtGui.QGuiApplication(sys.argv)
engine = QtQml.QQmlApplicationEngine()
url = QtCore.QUrl.fromLocalFile('./assets/qml/main.qml')
engine.load(url)
app_controller = AppController()
engine.rootContext().setContextProperty("app_controller", app_controller)
然后对于 qml,由于我没有来自 QQuickView 的窗口,所以我添加了一个窗口 qml 父级 (main.qml)。注意我还有一个 home.qml,我将内容加载到其中。 (装载机很棒):
import QtQuick 2.5
import QtQuick.Window 2.1
import QtQuick.Controls 1.4
import QtMultimedia 5.6
Window {
id: mainWindow
visible: true
width: 640
height: 480
Rectangle{
width: parent.width
height: 30
Button{
text: "Home"
onClicked: pageLoader.source="home.qml"
x:0
y:0
}
}
Rectangle{
width: parent.width
height: parent.height - 30
x:0
y:30
Item{
Loader {
id: pageLoader
anchors.fill: parent
source: "home.qml"
}
}
}
}
关于python - Pyside2 QQuickView没有rootContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57797115/