2017-06-29 14 views
0

PyQt5とQMLの統合が初めてのことです。私はその問題について長い間捜し求めてきましたが、私のケースに十分近いシナリオを見つけることはできません。PythonのPyQt5とQMLの統合で、 "findChild"がAttributeErrorを返す

私がいるエラーは、(私はPyCharmを使用しています)以下の通りです:ここでは

File "D:/PyCharmProjects/SimpleQML.py", line 13, in __init__ 
    self.win = self.root.findChild(QObject, "mainWindow")AttributeError: 'NoneType' object has no attribute 'findChild' 

は私のpythonのコードです:ここで

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

class SimpleQML(QQuickView): 
    def __init__(self, parent=None): 
    super(SimpleQML, self).__init__(parent) 

     self.setSource(QUrl.fromLocalFile("D:/Qt/SimpleQML/SimpleQML.qml")) 
     self.root = self.rootObject() 
     self.win = self.root.findChild(QObject, "mainWindow") 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    win = SimpleQML() 
    win.setTitle("SimpleQML") 
    win.setResizeMode(QQuickView.SizeRootObjectToView) 
    win.show() 
    sys.exit(app.exec_()) 

は私の(本当に簡単)QMLコードです:

import QtQuick 2.6 
import QtQuick.Window 2.2 

Rectangle{ 
    id: mainWindow 
    objectName: "mainWindow" 
    visible: true 
    width: 400 
    height: 400 
    color: "#323232" 
} 

また、QMLとPyQt5の統合に関するアドバイスがありましたら、それは歓迎する以上のものです。

ありがとうございます!

答えて

0

rootObject関数を使用するとmainWindowの矩形が得られ、子供を検索するときに子供がいないため見つけることができないので、得られるエラーは有効です。あなたが使用することができ、それを確認するには:

print(self.root.objectName()) 

出力:

mainWindow 

をあなたにQMLを変更する場合:

import QtQuick 2.6 
import QtQuick.Window 2.2 

Item{ 
    Rectangle{ 
     id: mainWindow 
     objectName: "mainWindow" 
     visible: true 
     width: 400 
     height: 400 
     color: "#323232" 
    } 
} 

その後、あなたはmainWindow子を取得します。

+0

こんにちは!答えてくれてありがとう! 残念ながら、 "print(self.root.objectName())"を試みても動作しません。 'NoneType'オブジェクトには 'objectName'という属性はありません そして、奇妙なことは私がしばらくコードを使用していたことですが、もう動作しませんでした。 一番不満なことは、私が友達にそれを与えたことです。私は何が起こっているのか分かりませんxD – Eph

+0

本当ですか?ドライブ、ドロップボックスなどでコードを共有できます – eyllanesc

+0

pyqtを再インストールしてみてください。 – eyllanesc

関連する問題