2016-04-29 28 views
0

私は現在チュートリアル: Here is the one I am followingとこのリンクをたどっています。その男はあなたにコードを与えます。とにかく底にそれを含めました。は、クラッシュせずにtkinter GUIでmatplotlibのグラフを描画できません。

確かにお勧めしますか?

  • のPython 3.5
  • すべて 'TkAgg' とmatplotlibの読み取りにスパイダーのためのバックエンドを設定している
  • 最新スパイダー2.3.8を使用して

    • :しかし、今問題に直面して(も年齢を取りました!) 。

    問題の原因となっている3つの行をハッシュタグにしました。これらの行がアクティブでないときは正常に動作します。起動して実行すると、端末がクラッシュしてメッセージが表示されます。

    突然カーネルが亡くなったようです。このコンソールの使用を続行するには、 'Restart kernel'を使用します。

    私は本当に解決策を探しています。目的はTkinter GUIにクラッシュすることなくグラフを取得することです。助けてください!?ここで

    コードは、リンクで提供1とほぼ同じです:

    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() 
    

    それは、スパイダーがクラッシュする上記三から六行です。

  • +0

    コードが多すぎます。これを10-15行の例に減らすことはできますか? – tacaswell

    +0

    @Panik matplotlibの例を確認できますか? http://matplotlib.org/examples/user_interfaces/embedding_in_tk.htmlをご覧ください。 – mfitzp

    +0

    @tcaswellはコードを更新して縮小しますが、小さな15行の例では作成できませんが、できる限り小さくします! – Panik

    答えて

    0

    私は2,3日(Python 3.5.2/64-bit、matplotlib 1.5.1、Win 10 Professional)同じ問題を抱えていました。 matplotlib、tkinter、Pythonの再インストールは役に立たなかった。 AnacondaのTkinter + matplotlibもうまくいきませんでした。私はソースからmatplotlibを構築するのに十分な知識がないので、Ubuntu + Anacondaをインストールしただけで問題を解決することができました。

    投稿したコード(インデントなど)に問題がありますが、修正しようとしませんでした。しかし、次のコードはUbuntuで作業しています:

    import matplotlib 
        from matplotlib.figure import Figure 
        from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg 
        import tkinter as tk 
    
        fig = Figure() 
        plt = fig.add_subplot(111) 
        plt.plot([1, 2], [1, 2]) 
    
        root = tk.Tk() 
        canvas = FigureCanvasTkAgg(fig, master=root) 
        canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=1) 
        root.update() 
        root.mainloop() 
    

    私はそれが助けてくれました。

    関連する問題