使用PySimpleGUI显示matplotlib图形时出现Tkinter错误的原因

使用PySimpleGUI显示matplotlib图形时出现Tkinter错误的原因,matplotlib,tkinter,pysimplegui,Matplotlib,Tkinter,Pysimplegui,我目前正在使用PySimpleGUI开发Python中的GUI,并正在主窗口包含的框架中绘制一些图形。我使用这个示例代码成功地做到了这一点,但是,当我在绘制图形后关闭主窗口时,我得到了与Tkinter相关的以下错误列表: Exception in Tkinter callback\ Traceback (most recent call last):\ File "/usr/lib64/python3.6/tkinter/__init__.py", line 1705,

我目前正在使用PySimpleGUI开发Python中的GUI,并正在主窗口包含的框架中绘制一些图形。我使用这个示例代码成功地做到了这一点,但是,当我在绘制图形后关闭主窗口时,我得到了与Tkinter相关的以下错误列表:

Exception in Tkinter callback\
Traceback (most recent call last):\
  File "/usr/lib64/python3.6/tkinter/__init__.py", line 1705, in __call__\
    return self.func(*args)\
  File "/usr/lib64/python3.6/tkinter/__init__.py", line 3072, in set\
    self.tk.call(self._w, 'set', first, last)\
_tkinter.TclError: invalid command name\ ".!toplevel.!frame.!notebook.!frame4.!frame4.!tkscrollableframe.!scrollbar2"\
Exception in Tkinter callback\
Traceback (most recent call last):\
  File "/usr/lib64/python3.6/tkinter/__init__.py", line 1705, in __call__\
    return self.func(*args)\
  File "/usr/lib64/python3.6/tkinter/__init__.py", line 3072, in set\
    self.tk.call(self._w, 'set', first, last)\
_tkinter.TclError: invalid command name\ ".!toplevel.!frame.!notebook.!frame4.!frame4.!tkscrollableframe.!scrollbar"\
Exception in Tkinter callback\
Traceback (most recent call last):\
  File "/usr/lib64/python3.6/tkinter/__init__.py", line 1705, in __call__\
    return self.func(*args)\
  File "/usr/lib64/python3.6/tkinter/__init__.py", line 3072, in set\
    self.tk.call(self._w, 'set', first, last)\
_tkinter.TclError: invalid command name\ ".!toplevel.!frame.!notebook.!frame4.!frame4.!tkscrollableframe.!scrollbar2"\
Exception in Tkinter callback\
Traceback (most recent call last):\
  File "/usr/lib64/python3.6/tkinter/__init__.py", line 1705, in __call__\
    return self.func(*args)\
  File "/usr/lib64/python3.6/tkinter/__init__.py", line 3072, in set\
    self.tk.call(self._w, 'set', first, last)\
_tkinter.TclError: invalid command name\ ".!toplevel.!frame.!notebook.!frame4.!frame4.!tkscrollableframe.!scrollbar"\
我是matplotlib新手,以前从未使用过Tkinter,但如果有人知道,我想知道这些错误的原因。我的代码相当大,但如果需要,我可以将其添加到帖子中。 我试着注释代码的不同部分以找到罪魁祸首,当我删除与我使用的演示中的以下内容对应的行时,错误停止了:

figure_canvas_agg = FigureCanvasTkAgg(figure, canvas)
以前有人遇到过这个问题吗?我在运行Centos的机器上运行这个程序,并尝试在Windows中运行一个更简单的程序,该程序关闭时没有任何问题

提前谢谢

编辑1:根据请求,我刚刚添加了我可以生成的最简单的Python代码,它再现了这种错误:

import PySimpleGUI as sg
import matplotlib as mp
from matplotlib import figure
from matplotlib.backends import backend_tkagg
import numpy as np

layout1 =   [
                [
                    sg.Frame("Frame",
                                [
                                    [
                                        sg.Column(
                                                    [
                                                        [sg.Canvas(key="-CANVAS-")] 
                                                    ],
                                                    size=(1000,1000)
                                                )
                                    ] 
                                ]
                            )
                ] 
            ]

layout2 =   [
                [sg.Column(layout1, scrollable=True)] 
            ] 

window = sg.Window("Window", layout2)
window.finalize()

x = np.array(list(range(10)))
fig = figure.Figure()
ax = fig.add_axes((0,0,1,1))
ax.plot(x, x)

figure_canvas_tkagg = backend_tkagg.FigureCanvasTkAgg(fig, master=window["-CANVAS-"].TKCanvas)
figure_canvas_tkagg.draw()
figure_canvas_tkagg.get_tk_widget().pack()

while True:
    event, values = window.read()

    if event == sg.WINDOW_CLOSED:
        break

window.close()
这似乎与我的GUI代码由cointainer对象中的许多级别的容器对象组成这一事实有关。在我的完整代码中,我在这上面有几个层,但在我建立了以下层次结构之后,错误似乎出现了:

纵队 框架 纵队 帆布

应该注意的是,使用VisualStudio代码的调试器,我发现错误并不完全发生在窗口关闭时(调用window.close()方法时),而是发生在一段时间之前

编辑2:我刚刚对它进行了测试,出于某种原因,只有在Centos机器上运行附加的Python脚本时才会发生此错误,而不是在Windows中


编辑3:我发现如果在关闭窗口之前关闭我创建的所有图形,这些错误将不会发生。然而,这并不是一个完整的解决方案,因为错误发生在PySimpleGUI的window.close()命令运行之前,所以我不知道在窗口关闭的情况下将关闭图形的代码放在哪里。

您能给我们展示一些产生错误的最小代码吗?只是在运行脚本后添加了一些代码没有错误。从失败消息来看,它似乎设置了滚动条的位置,但滚动条不存在,这可能是由于窗口已被破坏或关闭造成的。因此,您在尝试运行脚本时没有任何问题?真奇怪。但我不知道为什么滚动条会导致这个问题。另一方面,我不知道PySimpleGUI所构建的底层Tkinter是如何工作的,因此它可能是PySimpleGUI实现中的某种东西。至少它不会影响我的GUI的功能,因为在我关闭它之前,错误不会发生,但最好将它们清除掉。