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'它在文档中看起来确实是这样的:
发布于 2019-09-07 07:37:36
我通过做一些不同的事情来解决这个问题。我最终也使用了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 parent (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"
}
}
}
}https://stackoverflow.com/questions/57797115
复制相似问题