将matplotlib画的图嵌入tkinter
时间: 2023-10-06 14:07:05 浏览: 117
可以使用Tkinter的Canvas组件来嵌入matplotlib画出的图形。具体步骤如下:
1. 将matplotlib的Figure对象转换为Tkinter的PhotoImage对象。
```python
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import tkinter as tk
import numpy as np
# 创建一个Figure对象
fig = Figure(figsize=(5, 4), dpi=100)
# 在Figure对象上绘制一个sin(x)函数曲线
t = np.arange(0, 3, .01)
fig.add_subplot(111).plot(t, 2 * np.sin(2 * np.pi * t))
# 将Figure对象转换为Tkinter的PhotoImage对象
canvas = FigureCanvasTkAgg(fig, master=root) # 创建一个Tkinter的Canvas对象
canvas.draw() # 显示图形
img = canvas.get_tk_widget().winfo_toplevel().grab() # 获取PhotoImage对象
```
2. 将PhotoImage对象插入到Tkinter的Label或Canvas组件中显示。
```python
# 创建一个Tkinter的Label对象,并插入PhotoImage对象
label = tk.Label(root, image=img)
label.pack()
# 或者创建一个Tkinter的Canvas对象,并插入PhotoImage对象
canvas = tk.Canvas(root, width=img.width(), height=img.height())
canvas.pack()
canvas.create_image(0, 0, anchor="nw", image=img)
```
完整代码示例如下:
```python
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
import tkinter as tk
import numpy as np
# 创建一个Tkinter的窗口
root = tk.Tk()
# 创建一个Figure对象
fig = Figure(figsize=(5, 4), dpi=100)
# 在Figure对象上绘制一个sin(x)函数曲线
t = np.arange(0, 3, .01)
fig.add_subplot(111).plot(t, 2 * np.sin(2 * np.pi * t))
# 将Figure对象转换为Tkinter的PhotoImage对象
canvas = FigureCanvasTkAgg(fig, master=root) # 创建一个Tkinter的Canvas对象
canvas.draw() # 显示图形
img = canvas.get_tk_widget().winfo_toplevel().grab() # 获取PhotoImage对象
# 创建一个Tkinter的Label对象,并插入PhotoImage对象
label = tk.Label(root, image=img)
label.pack()
# 或者创建一个Tkinter的Canvas对象,并插入PhotoImage对象
# canvas = tk.Canvas(root, width=img.width(), height=img.height())
# canvas.pack()
# canvas.create_image(0, 0, anchor="nw", image=img)
# 进入Tkinter的事件循环
root.mainloop()
```
阅读全文