我真的太难了啊 2024-12-25 17:11 采纳率: 62.5%
浏览 43
已结题

获取 LineSeries对象

PySide6中,获取QML中的 LineSeries对象为 None
其他的对象都可以获取,只有 LineSeries 获取不到
有朋友知道什么问题么?

Window {
    visible: true
    width: 640
    height: 480

    ChartView {
        id: chartView
        objectName: "chart"
        title: "Chart Example"
        anchors.fill: parent

        LineSeries {
            id: lineSeries
            objectName: "lineSeries"
            // 其他配置...
        }
    }
}

root = engine.findChild()[0]
 chart = root.findChild(QObject, "chart")
 line_ = chart.findChildren(QObject,"lineSeries")

  • 写回答

36条回答 默认 最新

  • 专家-皆知 2024-12-25 17:12
    关注
    获得0.15元问题酬金

    参考免费微信小程序:皆我百晓生 作答,经由专家-皆知整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。

    从您提供的代码来看,您正在尝试从PySide6的QML环境中获取一个LineSeries对象,但遇到了问题。这里有几个可能的原因和解决方案:

    1. 确保QML加载完成:在尝试获取LineSeries对象之前,需要确保QML已经完全加载。这可以通过使用信号和槽来实现。

    2. 正确使用findChildren方法findChildren方法返回的是一个列表,即使只有一个匹配的对象,也需要通过索引访问。

    3. 确保对象名称正确:对象名称必须与QML中定义的objectName属性完全匹配。

    下面是修改后的代码,包括了这些改进:

    from PySide6.QtCore import QObject, QUrl
    from PySide6.QtGui import QGuiApplication
    from PySide6.QtQml import QQmlApplicationEngine
    
    class MyApplication(QObject):
        def __init__(self):
            super().__init__()
            self.engine = QQmlApplicationEngine()
            self.engine.load(QUrl('main.qml'))
            self.engine.rootObject().setProperty('myApp', self)
    
        def get_line_series(self):
            root = self.engine.rootObjects()[0]
            chart = root.findChild(QObject, "chart")
            line_series = chart.findChildren(QObject, "lineSeries")
            
            if line_series:
                return line_series[0]
            else:
                return None
    
    if __name__ == "__main__":
        import sys
        app = QGuiApplication(sys.argv)
        my_app = MyApplication()
        sys.exit(app.exec())
    

    QML文件 main.qml

    import QtQuick 2.15
    import QtQuick.Controls 2.15
    
    Window {
        visible: true
        width: 640
        height: 480
    
        ChartView {
            id: chartView
            objectName: "chart"
            title: "Chart Example"
            anchors.fill: parent
    
            LineSeries {
                id: lineSeries
                objectName: "lineSeries"
                // 其他配置...
            }
        }
    }
    

    在这个示例中,我创建了一个MyApplication类,它负责加载QML文件,并提供了一个get_line_series方法来获取LineSeries对象。请确保QML文件的路径正确,并且QML文件中的objectName属性与代码中使用的名称匹配。

    如果问题仍然存在,请检查QML文件是否正确加载,以及是否有其他错误导致LineSeries对象无法被正确识别。

    评论

报告相同问题?

问题事件

  • 系统已结题 1月2日
  • 创建了问题 12月25日