我目前正在使用教程跟隨此鏈接: Here is the one I am following。夥計給你的代碼。無論如何,它已經包括在底部。無法在tkinter GUI中繪製matplotlib圖表而不會崩潰
肯定會推薦。但現在面臨的問題:
- 使用Spyder的2.3.8
- 的Python 3.5
- 一切最新
- 已經爲Spyder的後端爲 'TkAgg' 讀matplotlib(也花了很長時間!) 。
已經標出了導致問題的三條線。當這些行不活躍時正常工作。激活它們並運行會導致我的終端崩潰並收到消息:
看起來內核意外死亡。使用'重新啓動內核'繼續使用這個控制檯。
我真的一直在尋找解決方案。目標是讓圖表進入Tkinter GUI而不會崩潰。請幫忙!?
下面是代碼,幾乎等同於在鏈接中提供的一個:
import matplotlib
#matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg,NavigationToolbar2TkAgg
from matplotlib.figure import Figure
import tkinter as tk
import pandas as pd
from tkinter import ttk
LARGE_FONT=("Consolas",12)
class SeaofBTCapp(tk.Tk):
def __init__(self,*args,**kwargs):
#
#tk.Tk.wm_title(self,"")
print("")
tk.Tk.__init__(self,*args,**kwargs)
tk.Tk.wm_title(self,"Hold my Hand")
tk.Tk.iconbitmap(self,default="1.ico")
container=tk.Frame(self)
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 (StartPage,PageThree):
frame=F(container, self)
self.frames[F]=frame
frame.grid(row=0,column=0,sticky="nsew") #north south east west
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
def qf(stringtoprint):
print(stringtoprint)
class StartPage(tk.Frame):
def __init__(self,parent,controller):
ttk.Frame.__init__(self,parent)
label=ttk.Label(self,text="Testing",font=LARGE_FONT)
label.pack(pady=10,padx=10)
button3=ttk.Button(self, text="Graph page",
command=lambda:controller.show_frame(PageThree))
#lambda:controller.show_frame(PageOne))
button3.pack()
class PageThree(tk.Frame):
def __init__(self, parent, controller):
# app=tk.Tk()
tk.Frame.__init__(self,parent)
label=tk.Label(self,text="Graph Page",font=LARGE_FONT)
label.pack(pady=10,padx=10)
label1=ttk.Button(self, text="Start Page",
command=lambda:controller.show_frame(StartPage))
label1.pack()
label1=ttk.Button(self, text="Back to Home",
command=lambda:controller.show_frame(StartPage))
label1.pack()
# f=Figure(figsize=(5,5))
# a=f.add_subplot(111)
# a.plot([1,2,3,4,5,6,7,8],[5,6,7,8,1,2,2,1])
# canvas=FigureCanvasTkAgg(f,self)
# canvas.show()
# canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH,expand=True)
app=SeaofBTCapp()
app.mainloop()
這是上述三六行導致Spyder的崩潰。
這裏有太多的代碼。你能減少到10-15線的例子嗎? – tacaswell
@Panik您可以檢查matplotlib的例子,例如http://matplotlib.org/examples/user_interfaces/embedding_in_tk.html確保它們適合你? – mfitzp
@tcaswell將更新代碼並將其縮小,無法將其作爲15行的小示例,但會盡可能小。 – Panik