使用PyQt从一个QML页面移动到另一个QML页面

时间:2017-04-04 06:18:40

标签: qt python-3.x qml pyqt4 pyqt5

事实上我是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())

1 个答案:

答案 0 :(得分:-1)

很好,感谢你的帮助解决了它: 实际上,在列表rootObject中添加第二行就足够了。

def test3(self):

    engine.load('Classe.qml')
    win1 = engine.rootObjects()[1]
    win1.findChild(QObject, "labelCo").setProperty("text", "HELLOWORLD")