我对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的集成有任何建议,那就非常受欢迎了。
提前谢谢!
答案 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
孩子。