【问题标题】:Getting matplotlib to render points clicked with a mouse.让 matplotlib 渲染用鼠标单击的点。
【发布时间】:2016-05-05 10:40:11
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 你可以制作自定义 UI Widget 来调用鼠标事件,并且每次鼠标点击框架/画布时都会创建新的 UI 小部件,这就是 Pyside 的工作原理。

标签: python algorithm animation matplotlib tkinter


【解决方案1】:

这个例子可能是一个开始。它的后端独立。要添加您自己的按钮,您可能需要查看 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多