使用 Matplotlib 正弦波创建简单图形用户界面

PythonPythonBeginner
立即练习

This tutorial is from open-source community. Access the source code

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本实验中,你将学习如何使用 Matplotlib 的 Button 小部件创建一个简单的图形用户界面(GUI)。该 GUI 将允许你通过使用 “下一个” 和 “上一个” 按钮来更改频率,从而修改正弦波。

虚拟机使用提示

虚拟机启动完成后,点击左上角切换到 “笔记本” 标签,以访问 Jupyter Notebook 进行练习。

有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。

如果你在学习过程中遇到问题,请随时向 Labby 提问。课程结束后提供反馈,我们将立即为你解决问题。

导入必要的库

首先,让我们导入必要的库,包括 matplotlib.pyplotnumpy 以及 matplotlib.widgets 中的 Button

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import Button

设置初始绘图

接下来,我们将设置初始绘图。我们将使用 numpyarange 函数创建一个频率为 2 Hz 的正弦波,并使用 matplotlib.pyplotplot 函数进行绘制。

freqs = np.arange(2, 20, 3)
fig, ax = plt.subplots()
t = np.arange(0.0, 1.0, 0.001)
s = np.sin(2*np.pi*freqs[0]*t)
l, = ax.plot(t, s, lw=2)

创建按钮回调函数

现在,我们将为 “下一个” 和 “上一个” 按钮创建两个回调函数。这些函数将使用不同频率的新正弦波更新绘图。

class Index:
    ind = 0

    def next(self, event):
        self.ind += 1
        i = self.ind % len(freqs)
        ydata = np.sin(2*np.pi*freqs[i]*t)
        l.set_ydata(ydata)
        plt.draw()

    def prev(self, event):
        self.ind -= 1
        i = self.ind % len(freqs)
        ydata = np.sin(2*np.pi*freqs[i]*t)
        l.set_ydata(ydata)
        plt.draw()

callback = Index()

创建 “下一个” 和 “上一个” 按钮

现在,我们将使用 matplotlib.pyplotadd_axes 函数创建 “下一个” 和 “上一个” 按钮,并使用 on_clicked 将我们之前创建的回调函数分配给它们。

axprev = fig.add_axes([0.7, 0.05, 0.1, 0.075])
axnext = fig.add_axes([0.81, 0.05, 0.1, 0.075])
bnext = Button(axnext, 'Next')
bnext.on_clicked(callback.next)
bprev = Button(axprev, 'Previous')
bprev.on_clicked(callback.prev)

显示绘图

最后,我们将使用 matplotlib.pyplotshow 函数来显示绘图。

plt.show()

总结

在本实验中,你学习了如何使用 Matplotlib 的 Button 小部件创建一个简单的图形用户界面(GUI)。你还学习了如何通过使用 “下一个” 和 “上一个” 按钮来改变频率,从而修改正弦波。