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

如何在Python3.6的Tkinter中用Matplotlib Figure绘制环形图?

把Matplotlib环形图嵌入Tkinter窗口的解决方案

嗨,我帮你把代码调整好了,完美适配Python3.6+Tkinter的环境,核心思路就是用Matplotlib的面向对象API(matplotlib.figure.Figure)替代pyplot,再通过FigureCanvasTkAgg把绘图组件整合到Tkinter窗口里。

直接上可运行的完整代码:

import tkinter as tk
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg

# 创建Tkinter主窗口
root = tk.Tk()
root.title("Tkinter里的环形图")

# 1. 创建Matplotlib的Figure对象(替代pyplot的plt.figure)
fig = Figure(figsize=(5, 4), dpi=100)

# 2. 添加子图到Figure
ax = fig.add_subplot(111)

# 3. 准备环形图的数据和配置
data = [20, 30, 50]
labels = ["A", "B", "C"]
# 设置环形的宽度,0.3就是中间空白的大小
wedgeprops = {'width': 0.3}

# 4. 绘制环形图
ax.pie(data, labels=labels, wedgeprops=wedgeprops, autopct='%1.1f%%')
# 保证饼图是正圆形
ax.axis('equal')

# 5. 创建Tkinter兼容的Canvas组件,把Figure绑定进去
canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
# 把Canvas放到窗口里(用pack/grid都可以)
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)

# 启动Tkinter主循环
tk.mainloop()

关键细节说明:

  • 为什么不用pyplot?因为pyplot是基于全局状态的绘图方式,嵌入GUI时容易出现线程冲突和资源管理问题,用matplotlib.figure.Figure的面向对象方式更适合GUI集成。
  • wedgeprops={'width':0.3}是实现环形图的核心参数,调整这个值可以改变环形的粗细。
  • FigureCanvasTkAgg是Matplotlib专门为Tkinter提供的后端组件,负责把Matplotlib的绘图内容渲染成Tkinter能识别的控件。
  • 最后一定要调用canvas.draw()来触发绘图渲染,不然窗口里只会显示空白。

你可以直接把这段代码运行起来,就能看到Tkinter窗口里显示的环形图了,也可以根据自己的需求修改数据、标签或者样式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:15:44