内核似乎意外死亡。使用'重启内核'继续使用此控制台(zeromq v4.1.3)

时间:2015-11-26 10:27:59

标签: python-3.x matplotlib tkinter anaconda spyder

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 ;.我相信我编辑的唯一内容是事物的名称和一些填充值。

任何帮助将不胜感激!我完全希望答案是我做错了,我对整个编程都很陌生。

编辑:删除了我遗漏的其他代码的代码部分,因为这无疑会导致额外的'如果有人试图运行它,就会出现问题。

0 个答案:

没有答案