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