使用Python的Flet库时图表显示顺序不一致的问题求助
问题原因
你代码里创建row_graphs和row_tables时,用了**Python集合({})**来存放控件。集合是无序数据结构,每次遍历的顺序都是随机的,这就是图表和表格顺序每次都变的原因。
解决方案
把集合替换成列表([]),列表是有序容器,会严格按照你生成的顺序展示控件。
修改这两处代码:
- 图表行的controls从集合改为列表:
row_graphs = ft.Row(controls=[MatplotlibChart(fig, expand=True) for fig in figs])
- 表格行的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
相关产品推荐
相关产品推荐

