我试图实现一些非常类似于这个问题(不能绘制matplotlib图表在tkinter GUI没有崩溃)。链接中显示的代码与我的代码之间的唯一区别如下:
-我用canvas.get_tk_widget().grid(...)
代替canvas.get_tk_widget().pack(...)
。
-对于我的每一个单独的帧,我做一个columnconfigure
和rowconfigure
,因为这就是我如何组织我的GUI元素在每一帧。
-我的Spyder, Matplotlib和Tkinter版本都是最新版本(我使用的是Anaconda)。
-I没有收到任何警告或错误,我在Spyder中的控制台窗口只是停止,我必须重新启动我的内核。
我几乎看过所有关于matplotlib和tkinter的教程。在这一点上,我准备放弃。
编辑#2:当我复制并粘贴此代码(https://pythonprogramming.net/how-to-embed-matplotlib-graph-tkinter-gui/)时,我得到完全相同的错误。这让我想到也许这与我的装置有关。
编辑:代码的框架版本/问题代码
Master App Class:
class iSEEApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
tk.Tk.wm_title(self, "GUI V0.5")
container = tk.Frame(self)
container.winfo_toplevel().geometry("600x600")
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (pixelAnnoPage, patchAnnoPage, heatMapPage):
page_name = F.__name__
frame = F(parent=container, controller=self)
self.frames[page_name] = frame
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame("pixelAnnoPage")
def show_frame(self, page_name):
frame = self.frames[page_name]
frame.tkraise()
frame.focus_set()
通用框架类构造/约定:
class heatMapPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
self.buildFrame()
def buildFrame(self):
print("test")
#self.pack(fill="both", expand=True)
self.columnconfigure(1, weight = 1)
self.columnconfigure(3, pad = 7)
self.rowconfigure(3, weight = 1)
self.rowconfigure(5, pad = 7)
问题代码(in buildFrame()
):
self.heatFig = Figure(figsize=(5, 4), dpi=100)
self.heatPlot = self.heatFig.add_subplot(111)
self.heatPlot.plot([1,2,3,4,5,6,7,8],[5,6,7,8,1,2,2,1])
self.heatCanvas = FigureCanvasTkAgg(self.heatFig, master=self)
self.heatCanvas.get_tk_widget().grid(row=1, column=0, columnspan=2, rowspan=4, padx=5, sticky="nsew")
self.heatCanvas.show()
好的。所以事实证明,这个问题与我的代码无关。正如我上面提到的,我正在使用Anaconda Python包,这意味着我的主安装程序不是Pip而是Conda。每当我做conda upgrade matplotlib
,我会得到一个消息,声称一切都是最新的。然而,当我最终完成python -m pip install --upgrade matplotlib
时,不仅发现库不是最新的,而且它是一个完全不同的文件!基本上发生的事情是由Anaconda和Anaconda Cloud提供的matplotlib库被破坏了!如果您在自己的项目中看到这个问题,请使用PIP检查您的库。