PyQt5和QML集成问题“findChild”返回AttributeError

时间:2017-06-29 04:47:27

标签: python qt pyqt qml pyqt5

我对PyQt5和QML集成很新。我一直在寻找这个问题,我找不到一个与我的情况足够接近的情景。

我遇到的错误如下(我正在使用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的集成有任何建议,那就非常受欢迎了。

提前谢谢!

1 个答案:

答案 0 :(得分: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孩子。