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

Python Tkinter中Matplotlib折线图仅显示黑色的问题求助

问题原因及修复方案

核心问题

你的代码存在两个关键错误,导致图表无法正常显示,仅呈现黑色区域:

  1. 变量名不匹配:创建Tkinter画布时用的是gracanvas,但初始化FigureCanvasTkAgg时传入了未定义的canvas,导致matplotlib画布没有绑定到正确的Tkinter容器上。
  2. 未将matplotlib画布添加到界面:仅创建FigureCanvasTkAgg对象并调用draw(),但没有把它的TK组件添加到Tkinter界面的布局中。

修正后的代码

import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import tkinter as tk  # 确保已导入tkinter,你的代码中应该已定义main_WINDOW

###------Show Information Using Graph-------###

graquery = '''SELECT Date, Amount FROM balance'''
CURSOR.execute(graquery)
graresults = CURSOR.fetchall()
Date = [result[0] for result in graresults]
Amount = [result[1] for result in graresults]

# 创建matplotlib图表,设置尺寸匹配Tkinter画布
figure = plt.figure(figsize=(10, 4.5))
plt.plot(Date, Amount)
plt.xlabel('Date')
plt.ylabel('Amount')
plt.title('Balance Graph')
plt.xticks(rotation=45)  # 可选:旋转日期标签避免重叠

# 创建Tkinter画布容器,用place定位即可,无需重复pack
gracanvas = tk.Canvas(main_WINDOW, width=1070, height=452)
gracanvas.place(x=356, y=270)

# 绑定matplotlib画布到Tkinter容器,并添加到界面
figure_canvas = FigureCanvasTkAgg(figure, master=gracanvas)
figure_canvas.draw()
figure_canvas.get_tk_widget().pack(fill=tk.BOTH, expand=True)

额外优化建议

如果Date字段是字符串格式,建议转换为matplotlib可识别的日期类型,避免x轴显示异常:

from datetime import datetime
# 根据你的数据库日期格式调整解析规则,比如'%Y-%m-%d'
Date = [datetime.strptime(result[0], '%Y-%m-%d') for result in graresults]
plt.gcf().autofmt_xdate()  # 自动调整日期标签格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:55:16