python - 让 matplotlib 渲染用鼠标点击的点。

标签 python algorithm animation matplotlib tkinter

我是 Gui 编程的新手,所以如果这个问题在其他地方使用适当的术语重复出现,我深表歉意。 是否可以使用 matplotlib 制作交互式几何动画?特别是,我想在 Tkinter 框架中嵌入一个交互式 Matplotlib 窗口,以测试同一算法的多个变体。

这是一个典型的使用场景,我想为它写一个交互 程序如上所述:假设我想测试二维平面中点集的三角剖分算法。

当我运行我的 new_triangulation_algorithm.py 脚本时,我想打开一个具有嵌入式 matplotlib 窗口的交互式 tkinter 框架,用户通过单击,比如说,20个不同的点——每选择一个点,那个位置就会出现一个粗蓝点。我知道当我将鼠标光标悬停在 Matplotlib 上时,它“知道”该点的坐标,因为我总是看到它显示在我绘图的状态栏中。

但是我不知道如何用鼠标在那个位置输入一个点。

我的 Tkinter 框架的第二个面板将包含几个按钮,每个按钮对应一个不同的三角剖分算法,我想在给定的点集上设置动画。

随着算法的进行,我希望 matplotlib 窗口得到刷新以显示算法的当前状态。我想我必须使用 Matplotlib 的动画功能来做到这一点,但我不确定 这是因为 Matplotlib 必须嵌入到 Tkinter 框架中。

以后不仅要输入点,还要输入线段、圆、矩形,但我想掌握点的基本例子 如上所述。

最佳答案

这个例子可能是一个开始。它的后端独立。要添加自己的按钮,您可能需要查看 matplotlibs NavigationToolbar 类。有后端特定的实现,如 NavigationToolbar2QTAgg。您可以继承 Tk 版本并添加一些控件。

from matplotlib import pyplot
import numpy

x_pts = []
y_pts = []

fig, ax = pyplot.subplots()

line, = ax.plot(x_pts, y_pts, marker="o")

def onpick(event):
    m_x, m_y = event.x, event.y
    x, y = ax.transData.inverted().transform([m_x, m_y])
    x_pts.append(x)
    y_pts.append(y)
    line.set_xdata(x_pts)
    line.set_ydata(y_pts)
    fig.canvas.draw()

fig.canvas.mpl_connect('button_press_event', onpick)

pyplot.show()

关于python - 让 matplotlib 渲染用鼠标点击的点。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35054981/

相关文章:

algorithm - 计算数组中的值 "surround"数组外的不同值

algorithm - 这个 Multiple Sources Multiple Destinations 算法 NP 难吗?

java - 有没有办法在 Java 中为整个 Jframe 制作动画,使其移动?

jQuery UI 的 addClass 动画不会对子元素进行动画更改

html - 是否可以在 html 模板中添加一个简单的动画并使其在所有移动设备上工作?

python - 选择特定的 CSV 列(过滤)-Python/pandas

python - 如何在调试python C扩展时设置断点并执行其他gdb命令

Python 类继承没有做我认为应该做的事情

python - 如何使用 django 从 mongodb 数据库中检索数据?

c++函数返回 vector 中的最小正整数