关闭Canvas Python Matplotlib时未断开过去事件的连接

2024-09-30 10:30:49 发布

您现在位置:Python中文网/ 问答频道 /正文

实际上,我在使用Matplotlib作为Pyside 2画布的后端进行鼠标单击坐标时遇到了这个问题

我正在使用这个小部件: 类MatplotLibWidget(QtWidgets.QWidget):

    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)

        self.canvas = FigureCanvas(Figure())

        vertical_layout = QtWidgets.QVBoxLayout()
        vertical_layout.addWidget(self.canvas)
        vertical_layout.addWidget(NavigationToolbar(self.canvas, self))
        self.canvas.axes = self.canvas.figure.add_subplot(111)
        self.setLayout(vertical_layout)

这门课:

class BlablaWidget(MainFrame.Ui_MainWindow, QtWidgets.QWidget):


    def __init__(self, widgetBlabla, matching_fronts, matching_point):

        # I call the Widget Itself from another Module #

        QtWidgets.QWidget.__init__(self)
        self.Blablaplot = widgetBlabla
        if matching_fronts != 99999:
            self.Blabla_func(matching_fronts)


    def Blabla_func(self, matching_fronts):

        # on click event
        def onclick(event):
            print(event)
            ix, iy = round(float(event.xdata), 5), round(float(event.ydata), 5)

            print(ix, iy)
     .....

     .....
     self.Blablaplot.canvas.axes.plot(.....)

     # then i Call the event of mouse clicking
     self.Blablaplot.canvas.mpl_connect('button_press_event', onclick)

     self.Blablaplot.canvas.draw()

实际上,对于不同的过滤器,我得到了不同的数据,而且明显比新的绘图要多

问题是,对于GUI中的第一个绘图,我将打印1个单坐标,但当我清除前一个绘图并在窗口中显示另一个新绘图时,所有事件都会被保留,并且总是在屏幕上多次显示相同的坐标(我得到的每个新绘图,也会在屏幕上显示一个新事件)

我尝试在连接后断开“实际”事件,但这样做时,我看不到任何坐标

我做错了什么

提前谢谢


Tags: selfevent绘图initdef事件parentcanvas

热门问题