鱼C论坛

 找回密码
 立即注册
查看: 230|回复: 1

PySide6findChild()无法获取LineSeries对象

[复制链接]
发表于 2024-12-25 17:03:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
qml代码中添加
ChartView{
        id:CV
        objectName:chart

        LineSeries{
                id:LS
                objectName:lineSeries
                ...
        }
}

在PySide6中
root = engine.rootObjects()
chart_ = root.findChild(QObject,"chart")
line_ = chart_.findChild(QObject,"lineSeries")

运行发现,ChartView可以获取到,LineSeries怎么获取都是 None

有朋友遇到过么
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-12-25 17:03:42 | 显示全部楼层
这个问题可能是因为 `LineSeries` 对象在 QML 中是作为 `ChartView` 的子对象存在的,而 `findChild()` 默认只查找直接子对象。可以尝试通过递归的方式搜索 `LineSeries` 对象。下面是一个简单的方法来解决这个问题:

  1. def find_child_recursive(parent, object_name):
  2.     if parent.objectName() == object_name:
  3.         return parent
  4.     for child in parent.children():
  5.         result = find_child_recursive(child, object_name)
  6.         if result:
  7.             return result
  8.     return None

  9. root = engine.rootObjects()[0]  # 假设 rootObjects() 非空
  10. chart_ = find_child_recursive(root, "chart")
  11. line_ = find_child_recursive(chart_, "lineSeries")

  12. if line_ is None:
  13.     print("LineSeries 对象未找到")
  14. else:
  15.     print("成功找到 LineSeries 对象")
复制代码


这段代码定义了一个递归函数 `find_child_recursive`,可以在整个子树中查找指定 `objectName` 的对象。通过这个方法,应该能够成功找到 `LineSeries` 对象。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-21 14:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表