首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyside2 QQuickView没有rootContext?

Pyside2 QQuickView没有rootContext?
EN

Stack Overflow用户
提问于 2019-09-05 08:44:21
回答 1查看 198关注 0票数 1
代码语言:javascript
复制
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()

这会得到一个错误:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2019-09-07 07:37:36

我通过做一些不同的事情来解决这个问题。我最终也使用了pip Pyside2和ROS apt Pyside2包,但这(大部分)是无关的。

代码语言:javascript
复制
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,可以将内容加载到其中。(加载器很棒):

代码语言:javascript
复制
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"                                               
            }                                                                    
        }                                                                        
    }                                                                            
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57797115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档