Anaconda3-2.4.0-Windows-x86_64安装,包括Python 3.5 64位和Spyder 2.3.7。
Windows 7 Professional,SP1,64位。
我正在尝试关注youtube上的一系列视频,将matplotlib图形添加到tkinter窗口,前5个视频涵盖了tkinter窗口中窗口和按钮的初始创建,这一切都非常简单。当我到达第一个matplotlib添加时出现问题。即使我完全复制了视频中的人在Python中所做的事情,但我得到了一个错误,他获得了一个有效的程序。
以下是我目前正在尝试关注的视频的链接:
How to add a Matplotlib Graph to Tkinter Window in Python 3 - Tkinter tutorial Python 3.4 p. 6
播放时,系列中有其他视频的列表。
ipython控制台中给出的错误消息是:"内核似乎意外死亡。使用'重启内核'继续使用这个控制台"。该消息每隔几秒重复一次,直到重新启动内核'被选中。
在下面的代码中,如果它按原样运行,则不会打开任何窗口。如果' canvas.show()'注释掉后,会打开一个窗口,并在Windows中显示python崩溃错误。
如果' canvas.show()',' canvas.get_tk_widget()。pack(side = tk.TOP,fill = tk.BOTH),程序运行并且所有按钮都能正常运行,expand = True)'和' canvas._tkcanvas.pack()'都被注释掉了。
我已经研究过这个问题并发现版本4.0.6和4.1.1的zeromq问题已在新版本中修复。使用' conda列表' anaconda提示符中的命令显示版本号4.1.3,因此我不认为这是问题。
我在python 3.5中运行' sentdex' (视频中的人)正在运行3.4,这会导致问题吗?
这是我的代码(减去打开带按钮的窗口的3个类):
import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
import tkinter as tk
from tkinter import ttk
LARGE_FONT = ("Arial, 12")
class Home(tk.Tk):
def __init__(self, *args):
tk.Tk.__init__(self, *args)
tk.Tk.iconbitmap(self, default="icon1.ico")
tk.Tk.wm_title(self, "Converters & Calculators")
container = tk.Frame(self)
container.pack(side = "top", fill = "both", expand = True)
container.grid_columnconfigure(0, weight=1)
container.grid_rowconfigure(0, weight=1)
self.frames = {}
for F in (StartPage, MPL_Tutorial):
frame = F(container, self)
self.frames[F] = frame
frame.grid(row = 0, column = 0, sticky = "nsew")
self.show_frame(StartPage)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="Please select a calculator or convertor from the list:", font = LARGE_FONT)
label.pack(pady=20, padx=20)
MPL_Tutorial_button = ttk.Button(self, text = "Graph Page", command=lambda: controller.show_frame(MPL_Tutorial))
MPL_Tutorial_button.pack()
class MPL_Tutorial(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
label = tk.Label(self, text="Graph Page", font = LARGE_FONT)
label.pack(pady=20, padx=20)
Home_button = ttk.Button(self, text = "Home", command=lambda: controller.show_frame(StartPage))
Home_button.pack()
f = Figure(figsize = (5,5), dpi=100)
a = f.add_subplot(111)
a.plot([1,2,3,4,5,6,7,8], [5,8,1,3,7,4,9,5])
canvas = FigureCanvasTkAgg(f, self)
canvas.show()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand = True)
toolbar = NavigationToolbar2TkAgg(canvas, self)
toolbar.update()
canvas._tkcanvas.pack()
app = Home()
app.mainloop()
我在编写程序时编辑了一些内容,以反映我最终想要程序的应用程序,用于各种工程零碎的计算器/转换器,例如反射系数/ VSWR比率/回波损耗转换&#39 ;.我相信我编辑的唯一内容是事物的名称和一些填充值。
任何帮助将不胜感激!我完全希望答案是我做错了,我对整个编程都很陌生。
编辑:删除了我遗漏的其他代码的代码部分,因为这无疑会导致额外的'如果有人试图运行它,就会出现问题。