python - Pyside2 QQuickView没有rootContext?

标签 python qml pyside2

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'

看起来文档中确实有这样的内容:

Pyside2 docs for QQuickView

最佳答案

我通过做一些不同的事情来解决这个问题。我最终还使用了 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/

相关文章:

python - 如何在 PySide2 中将 python 列表转换为 QVariantList

python - 分配到项目大小 > 1 的 Python 3.x 缓冲区

Python 脚本无法从 Outlook 获取最新邮件

Python Numpy append 数组而不展平

qt - 带有 "velocity"和无限 "loops"的 QML 动画

c++ - 如何使用带有 QML 信号的自定义 Qt 类型?

qt - QML - 寻址祖先

python - 如何在 PySide2 中添加边框或设置 QLayout 透明?

python - 使用样式表更改paintEvent颜色?

python - 如何高效地将数千张高清照片加载到 pandas df 中并转换为 HDF?