You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python的Flet库时图表显示顺序不一致的问题求助

问题原因

你代码里创建row_graphs和row_tables时,用了**Python集合({})**来存放控件。集合是无序数据结构,每次遍历的顺序都是随机的,这就是图表和表格顺序每次都变的原因。

解决方案

把集合替换成列表([]),列表是有序容器,会严格按照你生成的顺序展示控件。

修改这两处代码:

  1. 图表行的controls从集合改为列表:
row_graphs = ft.Row(controls=[MatplotlibChart(fig, expand=True) for fig in figs])
  1. 表格行的controls同样改为列表:
row_tables = ft.Row(
    controls=[
        ft.DataTable(
            columns=table_columns,
            rows=rows,
        )
        for rows in data_tables
    ]
)
修改后的完整代码
import matplotlib.pyplot as plt
import pandas as pd
import flet as ft
from flet.matplotlib_chart import MatplotlibChart


def generate_data(data, factor1, factor2):
    return {
        "data": data,
        "AVE": [x * factor1 for x in data],
        "MAX": [x * factor2 for x in data],
        "MIN": [x * factor2 for x in data],
    }


def plot_graph(df, ax, title):
    ax.plot(df["data"], df["AVE"], label="AVE", marker="o")
    ax.plot(df["data"], df["MAX"], label="MAX", marker="x")
    ax.set_title(title)


def create_data_table(data_array, columns):
    row_data = list(zip(*[data_array[col] for col in columns]))
    return [
        ft.DataRow(cells=[ft.DataCell(ft.Text(str(cell))) for cell in row])
        for row in row_data
    ]


def main(page: ft.Page):
    columns = ["data", "AVE", "MAX", "MIN"]
    data = [0, 10, 20, 30, 40, 50]

    data_sets = [generate_data(data, i, i + 1) for i in range(1, 4)]
    dfs = [pd.DataFrame(data_set) for data_set in data_sets]
    figs, axs = zip(*[plt.subplots() for _ in data_sets])

    for df, ax, title in zip(dfs, axs, ["fig1", "fig2", "fig3"]):
        plot_graph(df, ax, title)

    table_columns = [ft.DataColumn(ft.Text(name)) for name in columns]
    data_tables = [create_data_table(data_set, columns) for data_set in data_sets]

    # 这里把集合{}改成列表[]
    row_graphs = ft.Row(controls=[MatplotlibChart(fig, expand=True) for fig in figs])

    # 同样把集合{}改成列表[]
    row_tables = ft.Row(
        controls=[
            ft.DataTable(
                columns=table_columns,
                rows=rows,
            )
            for rows in data_tables
        ]
    )

    page.add(row_graphs)
    page.add(row_tables)


ft.app(target=main)

内容的提问来源于stack exchange,提问作者Masuta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:20:17