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

matplotlib图表嵌入tkinter框架时不显示、仅占空间无报错问题求助

问题核心原因

你用plt.plot()绘制的折线图,是输出到matplotlib默认维护的独立画布中,并没有渲染到你专门为嵌入tkinter创建的fig = Figure()对象上,这个fig全程是空的,所以只会占用布局空间,不会显示任何内容。

修正方案

  • 抛弃plt.plot的全局绘制方式,在自己创建的fig上新增子图后执行绘制
  • 调整canvas.draw()的调用时机到绘图完成之后
  • 删除重复的画布pack操作
  • 可选:将导航栏的父容器改为和画布同属一个frame,避免布局错位

修正后的代码(仅修改matplot方法即可)

def matplot(self,parent):
    new_frame = Frame(self.detailed_frame,width=150,height=150)
    new_frame.pack()

    test_label = Label(new_frame,text='hello',font='Arial 16 bold')
    test_label.pack()

    # 在自定义的Figure对象上创建子图,再绘制内容
    fig = Figure(figsize=(4, 4), dpi=100)
    ax = fig.add_subplot(111) # 添加1行1列第1个子图
    ax.plot([120, 2, 3, 4], [120, 4, 9, 16], '-o') # 用子图对象绘制,不要用plt.plot

    canvas = FigureCanvasTkAgg(fig, master = new_frame)
    # 绘图完成后再刷新画布
    canvas.draw()
    get_widz = canvas.get_tk_widget()
    get_widz.pack(side=TOP, fill=BOTH, expand=1)

    # 导航栏父容器可以改成new_frame,和画布放在同一区域,按需调整即可
    toolbar = NavigationToolbar2Tk(canvas, new_frame)
    toolbar.update()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:24:03