如何访问点击动态创建的matplotlib canvas?

How to access clicked dynamically created matplotlib canvas?

我有 3 个 QVBoxLayout 在 QHBoxLayout 中每个包含 3 个图(总共 9 个),如下所示:

我的目标是在点击 he/she 时获取哪个 canvas 被点击。我正在以下动态创建图:

def create_random_figures():
    for i in range(3):
        x, y_leak, y_lin, y_sat = get_points_array(i)
        canvas = FigureCanvas(Figure(figsize=(5, 3)))
        ax = canvas.figure.subplots()
        ax.plot(x, y_leak, '--rs', label='Y_leak')
        ax.plot(x, y_lin, '-g*', label='Y_lin')
        ax.plot(x, y_sat, ':bo', label='Y_sat')
        ax.legend()

并连接到鼠标按钮点击事件。

    canvas.mpl_connect("button_press_event", self.canvas_on_press)
    self.vertical_layout_1.addWidget(canvas)

通过这种方式,我可以从点击的 canvas 中获取一些信息(x,y 坐标等),这些信息在 中有明确说明,但我找不到如何学习canvas 被点击。

如果要检测点击了哪个canvas,那么最好的选择是通过继承实现逻辑。

class Canvas(FigureCanvas):
    def __init__(self, parent=None):
        super().__init__(Figure(figsize=(5, 3)))
        self.setParent(parent)
        self.mpl_connect("button_press_event", self.on_press)

    def on_press(self, event):
        print(self, event)
x, y_leak, y_lin, y_sat = get_points_array(i)
canvas = Canvas()
ax = canvas.figure.subplots()

然后不再需要识别 canvas 因为 self 是 canvas.