【发布时间】:2016-08-24 00:35:32
【问题描述】:
我目前正在关注此链接的教程: Here is the one I am following。老哥给你代码。反正已经把它放在底部了。
肯定会推荐。但现在面临的问题:
- 使用 Spyder 2.3.8
- Python 3.5
- 一切都是最新的
- 已将 Spyder 的后端设置为将 matplotlib 读取为“TkAgg”(也需要很长时间!)。
已标记出导致问题的三行。当这些行不活动时工作正常。激活它们并运行会导致我的终端崩溃并收到消息:
内核似乎意外死亡。使用“重启内核”继续使用此控制台。
我真的一直在到处寻找解决方案。目标是在不崩溃的情况下将图表放入 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 行的例子吗?
-
@Panik 你能检查 matplotlib 的例子吗? matplotlib.org/examples/user_interfaces/embedding_in_tk.html 以确保它们为您工作?
-
@tcaswell 将更新代码并将其缩小,不能将其作为一个 15 行的小示例,但会尽可能小!
-
@mfitzp 也非常感谢,去过几次.. 但是,如果我复制您链接的代码,逐行复制...我得到完全相同的错误.. 没有 GUI 只是内核死了!似乎错误在于尝试通过 tkinter 画布“显示”图表时..让我发疯
-
@Panik 这就是我问的原因。我可以用你的代码重现错误,但是当我尝试演示代码时它也崩溃了,这表明我们的安装有问题。
标签: user-interface matplotlib tkinter tkinter-canvas