如何通过Python在QML QtCharts中添加和修改数据?

时间:2019-04-15 18:46:10

标签: python pyside2

我想使用ChartView和来自Python的数据在QML中创建LineSeries图表。我可以轻松地在Python中创建LineSeries并将数据追加到其中,但是我不知道如何将数据添加到QML ChartView。

我已经尝试过在Python中创建LineSeries并通过engine.rootContext()。setContextProperty()将其连接到QML,但是我没有看到如何将LineString添加到QML ChartView。我还可以将在QML中创建的LineSeries数据添加到Chartview,但是我需要能够在Python中定义和修改图表数据。似乎ChartView.createSeries()方法是添加数据的正确通道,但是我看不到如何将Python中定义的数据绑定到该方法。

在QML中创建示例LineSeries图表视图

ChartView {
    id: routechart
    title: "Routes View"
    width: 300
    Layout.rowSpan: 3
    Layout.column: 1
    Layout.alignment: Qt.AlignCenter
    Layout.fillHeight: true
    Layout.fillWidth: true
    antialiasing: true

    theme: ChartView.ChartThemeDark
    // backgroundColor: "#242526"

    LineSeries {
        name: "TestSeries"
        color: "#ffcc00"
        // pointsVisible: true
        XYPoint { x: 0; y: 0 }
        XYPoint { x: 1.1; y: 2.1 }
        XYPoint { x: 1.9; y: 3.3 }
        XYPoint { x: 2.1; y: 2.1 }
        XYPoint { x: 2.9; y: 4.9 }
        XYPoint { x: 3.4; y: 3.0 }
        XYPoint { x: 4.1; y: 3.3 }
    }
}

在Python中创建QLineSeries

class LineModel(QtCharts.QLineSeries):
    '''
    Model to hold XY line series data for 
    plotting.
    '''

    def __init__(self):
        super().__init__()

    def addTestData(self):
        x = [0, 2, 3, 7, 10]
        y = [6, 4, 8, 4, 5]

        for xp, yp in zip(x,y):
            self.append(xp, yp)

使用QML引擎注册QLineSeries

# instantiate test LineModel
linemodel = LineModel()

# register the python type bindings to QML engine
engine.rootContext().setContextProperty('LineModel', linemodel)

类似于填充QML ListView的工作原理,一旦LineSeries注册到QML引擎,我希望能够将Python的LineSeries添加到QML ChartView。但是,我在Chartview中找不到执行此功能的方法,因此必须有一些替代方法来连接数据。

0 个答案:

没有答案