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

Matplotlib表格数据位置调整:MySQL取数在PyQt5中展示效果不符预期

解决方案

核心问题排查

  1. 数据维度颠倒:原代码将每列数据拆分后按行传入,导致表格行列完全错位,直接使用SQL查询返回的result4作为单元格内容即可,无需额外拆分重组
  2. 表头配置错误:误将列字段设置为行标签,没有正确配置顶部列表头
  3. 配色逻辑错误:仅手动修改了两个单元格的背景色,没有实现全局行交错变色效果
  4. 布局参数不合理:bbox和scale参数设置不当,容易导致表格显示不全

修改后完整代码

def dashboard_fleet_statistics_fleets_visisted_current_year(self):
    try:
        import mysql.connector as con
        import matplotlib.pyplot as plt

        mydb = con.connect(host="localhost", user="root", password="你的数据库密码", db="fleet")
        cursor = mydb.cursor()
        cursor.execute('''SELECT fleet_code, fleet_name, COUNT(fleet_code) AS "No Of Visits", YEAR(date_of_visit) AS "Year Of Visit"
                          FROM vehicle_tyre_parameters
                          WHERE fleet_code != "" AND YEAR(date_of_visit) = YEAR(CURDATE())
                          GROUP BY fleet_code''')
        result4 = cursor.fetchall()
        # 及时关闭数据库连接避免资源泄漏
        cursor.close()
        mydb.close()

        # 动态适配画布高度,根据数据行数调整
        fig, ax = plt.subplots(figsize=(10, (len(result4)+1)*0.6))
        ax.axis('off')

        # 表格核心配置
        table = ax.table(
            cellText=result4,
            colLabels=['Fleet Code', 'Fleet Name', 'No of Visits', 'Year of Visit'],
            colLoc='center',
            cellLoc='center',
            loc='center',
            bbox=[0, 0, 1, 1] # 撑满整个画布区域
        )

        # 通用样式调整
        table.set_fontsize(14)
        table.auto_set_column_width(col=list(range(4))) # 自动适配每列宽度

        # 交错配色逻辑
        for row_idx in range(len(result4) + 1): # +1包含表头行
            # 表头行单独配色
            if row_idx == 0:
                color = "#cccccc"
            # 奇数行白色
            elif row_idx % 2 == 1:
                color = "white"
            # 偶数行浅灰色
            else:
                color = "#eeeeee"
            # 给当前行所有列设置背景色
            for col_idx in range(4):
                table[(row_idx, col_idx)].set_facecolor(color)

        plt.tight_layout()
        # 如需嵌入PyQt5,注释掉plt.show(),将fig绑定到FigureCanvasQTAgg组件即可
        plt.show()
    except Exception as e:
        print(f"运行错误:{str(e)}")

PyQt5适配说明

如果需要将该表格嵌入PyQt5界面,只需将生成的fig对象绑定到matplotlib.backends.backend_qt5agg.FigureCanvasQTAgg组件,再将组件添加到Qt布局中即可,表格生成逻辑无需调整。

内容的提问来源于stack exchange,提问作者Guirguis.Botros

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:09:03