事实上我是QML和PyQt的初学者,我发现使用PyQt从一个QML页面到另一个QML页面的过去然后我们使用QObject(property和setproperty)。
所以我能够显示第二个QML页面,然后当我使用setproperty时,我会收到此错误:AttributeError: 'NoneType' has no attribute setProperty
。
我的第二页qml "Classe.qml"
包含一个文本字段,当我点击第一页"main.qml"
的按钮时,我想要做的就是出现第二页然后是文本字段更改,我们写"hello world"
。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import Classe
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QtQml import QQmlApplicationEngine
from PyQt5.QtCore import QObject, pyqtSlot, QVariant
# Classe servant dans l'interaction.
class MainApp(QObject):
def __init__(self, context, parent=None):
super(MainApp, self).__init__()
self.win = parent
self.win.findChild(QObject, "ObjClasse").clicked.connect(self.test3)
self.ctx = context
def test3(self):
engine.load('Classe.qml')
self.win.findChild(QObject, "labelCo").setProperty("text", "hello world") ##l'erreur est ici
if __name__ == "__main__":
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
ctx = engine.rootContext()
engine.load('main.qml')
win = engine.rootObjects()[0]
py_mainapp = MainApp(ctx,win)
ctx.setContextProperty("py_MainApp", py_mainapp)
win.show()
sys.exit(app.exec())
答案 0 :(得分:-1)
很好,感谢你的帮助解决了它: 实际上,在列表rootObject中添加第二行就足够了。
def test3(self):
engine.load('Classe.qml')
win1 = engine.rootObjects()[1]
win1.findChild(QObject, "labelCo").setProperty("text", "HELLOWORLD")