Python将matplotlib嵌入到tkinter中

matplotlib窗口组成

tkinter是Python标准库中自带的GUI工具,使用十分方便,如能将matplotlib嵌入到tkinter中,就可以做出相对专业的数据展示系统,很有竞争力。

在具体实现之前,可以先看一下典型的matplotlib窗口

import numpy as np
import matplotlib.pyplot as plt

plt.plot(np.arange(100))
plt.show()

然后就看到了我们熟悉的plot图

plot图

这个图由两部分构成,分别是上面用于绘图的FigureCanvasTkAgg画布,以及下方的工具栏NavigationToolbar2Tk,二者存放在matplotlib.backends.backend_tkagg中,这两个组件在地位上和tkinter中的组件是等同的。

但除此之外还不够,因为画布并不意味着有图像,故而还要导入绘图窗口Figure,故而将matplotlib嵌入到tkinter中,最少需要使用下面的这些模块

import tkinter as tk
import tkinter.ttk as ttk

import matplotlib as mpl
mpl.use('TkAgg')        # 启用tkinter渲染matplotlib,从而可以嵌入到tkinter中
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import (
    FigureCanvasTkAgg, NavigationToolbar2Tk)
from matplotlib.figure import Figure

import numpy as np

其中,mpl.use(‘TkAgg’)用于启用tkinter渲染matplotlib,从而可以嵌入到tkinter中。

tkinter布局

在了解原理之后,具体实现就不难了。在嵌入matplotlib之前,可先对tkinter窗口做下布局,代码如下所示,首先创建一个标题为"数据展示工具"的窗口root,并为其添加两个控件,分别是右侧的frmCtrl和左侧的frmFigure,前者用于添加控件,后者用于嵌入图像

root = tk.Tk()
root.title("数据展示工具")
frmCtrl = ttk.Frame(root, width=200)
frmCtrl.pack(side=tk.RIGHT)

frmFigure = ttk.Frame(root)
frmFigure.pack(side=tk.LEFT, fill=tk.BOTH, expand=tk.YES)

嵌入图像

正如一开始所说的,matplotlib的绘图窗口由两部分构成,分别是绘图画布和工具栏,而绘图画布又要包含图像,所以先创建一个Figure,在将其导入到FigureCanvasTkAgg中。

fig = Figure()
canvas = FigureCanvasTkAgg(fig,frmFigure)
canvas.get_tk_widget().pack(
    side=tk.TOP,fill=tk.BOTH,expand=tk.YES)
toolbar = NavigationToolbar2Tk(canvas,frmFigure,
    pack_toolbar=False)
toolbar.update()
toolbar.pack(side=tk.RIGHT)

其中,canvas是绘图画布,toolbar是工具栏。至此,就已经完成了图像的嵌入工作,接下来要做的,就是跑死循环,从而把这个嵌入了绘图工具的窗口显示出来

root.mainloop()

结果如下

在这里插入图片描述
这个图的左侧显然就是matplotlib引入的绘图画布,右侧则是frmCtrl,主要是为了更加清晰地证明,画布的确嵌入到了tkinter窗口中。

如果觉得不过瘾,可以在创建fig之后,再画一个图像上去,代码如下

ax = fig.add_subplot()
ax.plot(np.arange(100))

然后再执行root.mainloop(),就可以得到下图

在这里插入图片描述

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Matplotlib可以嵌入Tkinter,实现在Tkinter窗口显示Matplotlib图形。具体步骤如下: 1. 导入TkinterMatplotlib库 2. 创建Tkinter窗口 3. 创建Matplotlib图形 4. 将Matplotlib图形嵌入Tkinter窗口 5. 运行Tkinter主循环 示例代码如下: ```python import tkinter as tk from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure import Figure # 创建Tkinter窗口 root = tk.Tk() root.title("Matplotlib in Tkinter") # 创建Matplotlib图形 fig = Figure(figsize=(5, 4), dpi=100) ax = fig.add_subplot(111) ax.plot([1, 2, 3, 4, 5], [2, 3, 5, 4, 6]) # 将Matplotlib图形嵌入Tkinter窗口 canvas = FigureCanvasTkAgg(fig, master=root) canvas.draw() canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1) # 运行Tkinter主循环 tk.mainloop() ``` 运行以上代码,即可在Tkinter窗口显示Matplotlib图形。 ### 回答2: Matplotlib是一个非常强大的Python绘图库,它可以用来绘制各种图形,包括折线图、散点图、饼图、直方图等等。而TkinterPython自带的一个GUI库,可以用来创建GUI应用程序,包括窗口、按钮、标签和文本框等等。 在Python,我们可以将Matplotlib集成到Tkinter应用程序,实现可视化图形的交互。这个过程需要使用到Matplotlib的子模块TkAgg(TkAgg:Tcl/Tk Agg backend,是指将Matplotlib绘制的图形放置在Tkinter应用程序的Canvas组件)及matplotlib.backends.backend_tkagg。 具体实现步骤如下: 1. 导入相关库,包括MatplotlibTkinter和numpy。 2. 建立main窗口。 3. 创建一个matplotlib图形,将其放置在Tkinter窗口。 4. 启动Tkinter的事件循环,以响应控件的事件和用户的交互。 代码示例: ``` import tkinter as tk from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure import Figure import numpy as np #建立主窗口 root = tk.Tk() root.title("Matplotlib Embedding in Tkinter") #建立一个1x1图形,并在其添加subplot fig = Figure(figsize = (5, 5), dpi = 100) ax = fig.add_subplot(111) #生成100个随机数的Numpy数组 x = np.arange(0, 100) y = np.random.normal(0, 1, 100) #绘制图形 ax.plot(x, y) #创建一个Canvas并将其放置在Tkinter窗口 canvas = FigureCanvasTkAgg(fig, master = root) canvas.draw() #将Canvas放置在Tkinter窗口 canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1) #启动Tkinter事件循环 tk.mainloop() ``` 以上代码创建了一个主窗口,并在其添加一个1x1的图形,用Numpy随机数绘制折线图。最后,将图形的Canvas放置在Tkinter窗口,并启动Tkinter的事件循环,以响应用户的交互。 总体来说,Matplotlib嵌入Tkinter是一种非常有用的技术,它使得我们可以在Tkinter应用程序轻松地添加可视化图形,并快速地与用户进行交互。 ### 回答3: Matplotlib是一款强大的用于绘制图形的Python库,而Tkinter则是Python的标准GUI库。将这两者结合起来,可以在Tkinter应用程序嵌入Matplotlib图形并将其显示出来。这对于需要实现数据可视化的应用程序非常有用。 使用Matplotlib嵌入Tkinter,需要使用FigureCanvasTkAgg类。该类可将Matplotlib图形绘制到Tkinter画布上。首先需要导入必要的模块: ```python import matplotlib import tkinter as tk from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg from matplotlib.figure import Figure ``` 然后,可以创建一个Tkinter窗口和一个Matplotlib图形,并将图形绘制到Tkinter画布上: ```python root = tk.Tk() root.title("Matplotlib with Tkinter") # 创建一个Matplotlib图形 fig = Figure(figsize=(5, 4), dpi=100) ax = fig.add_subplot(111) ax.plot([0,1,2,3,4],[10,1,20,3,40]) # 创建一个Tkinter画布,并将Matplotlib图形绘制到该画布上 canvas = FigureCanvasTkAgg(fig, master=root) canvas.draw() canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1) # 启动Tkinter事件循环 tk.mainloop() ``` 这段代码首先创建了一个Tkinter窗口,然后创建了一个Matplotlib图形并将其绘制到画布上。最后,启动了Tkinter事件循环,显示窗口和图形。 除了绘制图形,还可以通过将Matplotlib图形封装在Tkinter框架来实现用户与图形的交互。例如,可以轻松地添加按钮和滑块来更改图形参数,并实时更新Matplotlib图形。这为定制化的绘图提供了极大的灵活性。 总之,Matplotlib嵌入TkinterPython实现数据可视化的一种强大的方法,通过将两种库结合起来,我们可以创建强大的应用程序来探索、分析和可视化数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值