Python Tkinter中Matplotlib折线图仅显示黑色的问题求助
问题原因及修复方案
核心问题
你的代码存在两个关键错误,导致图表无法正常显示,仅呈现黑色区域:
- 变量名不匹配:创建Tkinter画布时用的是
gracanvas,但初始化FigureCanvasTkAgg时传入了未定义的canvas,导致matplotlib画布没有绑定到正确的Tkinter容器上。 - 未将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
相关产品推荐
相关产品推荐

