PySimpleGUI 集成 matplotlib 画图
时间: 2023-10-16 19:23:08 浏览: 139
PySimpleGUI 是一款基于 Python 的 GUI 框架,而 matplotlib 则是一个强大的 Python 画图库。这篇文章将介绍如何在 PySimpleGUI 中集成 matplotlib 画图。
步骤一:安装依赖库
首先需要安装 PySimpleGUI 和 matplotlib 两个库,可以使用以下命令进行安装:
```python
pip install PySimpleGUI
pip install matplotlib
```
步骤二:创建 PySimpleGUI 窗口
接下来需要创建一个 PySimpleGUI 窗口,用于显示 matplotlib 画出的图形。可以使用以下代码创建一个简单的窗口:
```python
import PySimpleGUI as sg
sg.theme('Dark Blue 3')
layout = [[sg.Graph((500, 500), (0, 0), (500, 500), key='graph')]]
window = sg.Window('Matplotlib Integration', layout, resizable=True, finalize=True)
graph = window['graph']
```
这个窗口只包含一个 Graph 对象,用于显示 matplotlib 画出的图形。
步骤三:使用 matplotlib 画图
接下来需要使用 matplotlib 画图。在 PySimpleGUI 中集成 matplotlib 最简单的方法是使用 FigureCanvasTkAgg 类。以下是一个简单的例子,用于在 PySimpleGUI 窗口中显示一条直线:
```python
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
fig, ax = plt.subplots()
ax.plot([0, 1, 2, 3], [0, 1, 4, 9])
canvas = FigureCanvasTkAgg(fig, graph.TKCanvas)
canvas.draw()
canvas.get_tk_widget().pack(side='top', fill='both', expand=1)
```
这段代码首先创建了一个 Figure 对象和一个 Axes 对象,然后使用 plot 方法画了一条直线。接着,创建了一个 FigureCanvasTkAgg 对象,它可以将 matplotlib 的图形绘制在 PySimpleGUI 窗口中的 Graph 对象上。最后,调用 draw 方法将图形绘制到 FigureCanvasTkAgg 对象上,并将它添加到 Graph 对象中。
步骤四:运行程序
最后,需要使用 PySimpleGUI 的事件循环处理器运行程序,以便可以响应用户的操作。以下是一个简单的例子:
```python
while True:
event, values = window.read()
if event == sg.WIN_CLOSED:
break
window.close()
```
这个程序会一直循环,直到用户关闭窗口。在每次循环中,它调用 read 方法来等待用户的操作。如果用户关闭了窗口,程序会退出循环,并调用 close 方法关闭窗口。
完整代码:
```python
import PySimpleGUI as sg
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
sg.theme('Dark Blue 3')
layout = [[sg.Graph((500, 500), (0, 0), (500, 500), key='graph')]]
window = sg.Window('Matplotlib Integration', layout, resizable=True, finalize=True)
graph = window['graph']
fig, ax = plt.subplots()
ax.plot([0, 1, 2, 3], [0, 1, 4, 9])
canvas = FigureCanvasTkAgg(fig, graph.TKCanvas)
canvas.draw()
canvas.get_tk_widget().pack(side='top', fill='both', expand=1)
while True:
event, values = window.read()
if event == sg.WIN_CLOSED:
break
window.close()
```
阅读全文