Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PySide2 findChild返回none_Python_Qml_Pyside2_C++ - Fatal编程技术网

Python PySide2 findChild返回none

Python PySide2 findChild返回none,python,qml,pyside2,c++,Python,Qml,Pyside2,C++,我试图使python代码与QML文件交互,但我的findChild()函数始终不返回任何值,我还尝试了findChildren()并返回[]。浏览了其他问题,但我发现没有任何效果。以下是我的python代码: import sys import os from PySide2.QtGui import QGuiApplication from PySide2.QtQml import QQmlApplicationEngine from PyQt5 import QtCore, QtGui, Q

我试图使python代码与QML文件交互,但我的findChild()函数始终不返回任何值,我还尝试了findChildren()并返回[]。浏览了其他问题,但我发现没有任何效果。以下是我的python代码:

import sys
import os
from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine
from PyQt5 import QtCore, QtGui, QtQml

def main():
    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine()
    engine.load(os.path.join("ui", "main.qml"))
    screen = engine.rootObjects()[0]
    print(screen)
    #returns <PySide2.QtGui.QWindow(0x1db42e7e2a0, name="main_window") at 0x000001DB434AD608>
    print(screen.findChild(QtCore.QObject, "rec_body"))
    #returns None

    if not engine.rootObjects():
        sys.exit(-1)
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

我遗漏了什么?

错误的原因很简单:您不应该将PySide2与PyQt5结合使用,因为它们将生成难以追踪的静态错误。“screen”是一个PySide2包装器,但您指出它从PyQt5库中查找类型为QObject的子对象,这是不合逻辑的

解决方案很简单:只需使用PySide2

import os
import sys

from PySide2.QtCore import QObject
from PySide2.QtGui import QGuiApplication
from PySide2.QtQml import QQmlApplicationEngine


def main():
    app = QGuiApplication(sys.argv)
    engine = QQmlApplicationEngine()
    engine.load(os.path.join("ui", "main.qml"))
    screen = engine.rootObjects()[0]
    print(screen)
    print(screen.findChild(QObject, "rec_body"))

    if not engine.rootObjects():
        sys.exit(-1)
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()
导入操作系统
导入系统
从PySide2.QtCore导入QObject
从PySide2.QtGui导入qgui应用程序
从PySide2.QtQml导入QQmlApplicationEngine
def main():
app=qgui应用程序(sys.argv)
引擎=QQmlApplicationEngine()
engine.load(os.path.join(“ui”、“main.qml”))
screen=engine.rootObjects()[0]
打印(屏幕)
打印(screen.findChild(QObject,“rec_body”))
如果不是engine.rootObjects():
系统出口(-1)
sys.exit(app.exec_())
如果名称=“\uuuuu main\uuuuuuuu”:
main()
输出:

<PySide2.QtGui.QWindow(0x556c48b6d8b0, name="main_window") at 0x7fb7d87f4240>
<PySide2.QtCore.QObject(0x556c48f2f830, name = "rec_body") at 0x7fb7d87f4280>

注意:您与QML交互的方式容易出错,因此不建议将QML对象导出到或反之亦然,正如我在以下文章中指出的:


成功了!谢谢你的回答和进一步的阅读建议,它已经改变了我对连接主题的一些看法。
<PySide2.QtGui.QWindow(0x556c48b6d8b0, name="main_window") at 0x7fb7d87f4240>
<PySide2.QtCore.QObject(0x556c48f2f830, name = "rec_body") at 0x7fb7d87f4280>