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

Posted

技术标签:

【中文标题】使用 PyQt 从一个 QML 页面移动到另一个页面【英文标题】:To move from one QML page to another using PyQt 【发布时间】:2017-04-04 06:18:39 【问题描述】:

事实上,我是 QML 和 PyQt 的初学者,我发现过去使用 PyQt 从一个 QML 页面到另一个页面的问题,然后我们使用 QObject(属性和 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())

【问题讨论】:

不要试图将 qml 文件视为页面。他们是班级。使一个主 qml 文件使用来自其他文件的类,例如 StackView、states 或 Loaders。另外,不要尝试从 python 调用findChildsetProperty。 qml 应该将 python 代码用作类库:qml 可以创建您在 python 中实现的类的对象。 很好,已经解决了,感谢您的帮助:实际上在列表rootObject中添加第二行就足够了。 def test3(self): engine.load('Classe.qml') win1 = engine.rootObjects()[1] win1.findChild(QObject, "labelCo").setProperty("text", "HELLO WORLD")跨度> 【参考方案1】:

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

def test3(self):

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

【讨论】:

以上是关于使用 PyQt 从一个 QML 页面移动到另一个页面的主要内容,如果未能解决你的问题,请参考以下文章

将对象从一页移动到另一页?

Pyqt5 & QML2 部署在 debian/mint (dev - ubuntu)

使用 PyQt 将项目动态设置为 QML ListModel

我收到错误:在名称范围内找不到名称 - 在MVVMLight应用程序中从一个页面移动到另一个页面时

如何在 SwiftUI 中从一个详情页跳转到另一个详情页并返回列表页?

如何在pyqt5中将按钮移动到另一个框架?