Аварийное закрытие приложения после использования matplotlib

#python #matplotlib #tkinter-canvas

#python #matplotlib #tkinter-canvas

Вопрос:

Я получаю беспорядочный сбой при попытке закрыть мое приложение python tkinter (в ubuntu) после того, как я показал и закрыл график matplotlib. Я просто закрываю окно, используя ‘x’.

 invalid command name "140146113720200poll"
while executing
  

«140146113720200poll»
(сценарий «после»)

Я явно что-то не закрыл должным образом, я нашел пару мест, в которых говорится, что a должен закрыть фигуру при закрытии Windows, но у фигуры нет метода закрытия. Что я должен сделать, чтобы правильно освободить ресурсы, которые я использую?

 def plotit(self):
    if self.gdata is None:
        return

    if self.plotframe is None:
        self.plotframe = tkinter.Toplevel()
        self.plotframe.title('graphy stuff')

    self.plotfig = matplotlib.pyplot.figure()
    canvas = FigureCanvasTkAgg(self.plotfig, master=self.plotframe)
    ax = Axes3D(self.plotfig)
    ax.scatter(self.gdata[0],self.gdata[1],self.gdata[2],marker='o',s=1.3)

    canvas.show()
    canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)

    toolbar = NavigationToolbar2TkAgg(canvas, self.plotframe)
    toolbar.update()
    canvas._tkcanvas.pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)
  

Я попытался настроить действие закрытия tkinter в окне, но это тоже не помогло.

Комментарии:

1. Не смешивайте pyplot (который поддерживает все виды состояний) с вашим собственным внедрением в графический интерфейс tk. Вероятно, существует состояние гонки, когда слишком много вещей пытаются разорвать компоненты gui на выходе. См. matplotlib.org/examples/user_interfaces/embedding_in_tk.html