2017-03-02 1 views
0

にmatplotlibのを埋め込みます。それから私がそれを閉じると、フルスクリーンのtkinterアプリケーションが開き、コーナーに背景画像と更新クロックが表示されます。私が何をしたいのですか?プログラムを起動すると、フルスクリーンのtkinterアプリケーションが開いて、背景の画像、更新中の時計、の中にmatplotlibのグラフが表示されます。基本的に私はアプリケーションにmatplotlibグラフを埋め込みたいと思っています。グラフコードを自分のクラスに入れて呼び出すことを試みましたが、これは前述の結果を示しています。は、私は起動時にビットコイン価格のmatplotlibのグラフを開き、価格変更するたびに更新するプログラムを持っているのTkinterアプリケーション

canvas = FigureCanvasTkAgg(fig, self) canvas.show() canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)

が、その後プログラムは全く起動していなかった。私はこれでplt.show()を交換してみました。私がスクリプトに入れた場所に関係なく、私が直接plt.show()をそれに置き換え、クラスに統合しようとしたときに '' canvas 'が定義されていない' '自分自身が定義されていない'ここでは、以下の完全なコードは次のとおりです。

from tkinter import * 
from PIL import ImageTk, Image 
import os 
import time 
import requests 
import tkinter as tk 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 
import matplotlib 
matplotlib.use("TkAgg") 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg 
from matplotlib.figure import Figure 
import matplotlib.animation as animation 
from matplotlib import style 
from tkinter import ttk 
import urllib 
import json 
import pandas as pd 
import numpy as np 
from PyQt5 import QtWidgets 

fig = plt.figure() 
ax1 = fig.add_subplot(1,1,1) 

class App(tk.Tk): 
    def __init__(self): 
     # call the __init__ method of Tk class to create the main window 
     tk.Tk.__init__(self) 

     # background image 
     img = ImageTk.PhotoImage(Image.open("0.png")) 
     panel = Label(self, image=img) 
     panel.pack() 

     # clock 
     self.label = tk.Label(self, text="", font=('comic',50,'bold'), 
          bg='#464545', fg='#1681BE') 
     self.label.place(height=204, width=484, x=1384, y=824)  
     self.update_clock() 

     # window geometry 
     w, h = self.winfo_screenwidth(), self.winfo_screenheight() 
     self.geometry("%dx%d+0+0" % (w, h)) 

     self.overrideredirect(True) 
     self.mainloop() 

    def update_clock(self): 
     now = time.strftime('%H:%M:%S') 
     self.label.configure(text=now) 
     self.after(1000, self.update_clock) 

    def animate(self): 

     dataLink = 'https://btc-e.com/api/3/trades/btc_usd?limit=2000d' 
     data = urllib.request.urlopen(dataLink) 
     data = data.read().decode("utf-8") 
     data = json.loads(data) 

     data = data["btc_usd"] 
     data = pd.DataFrame(data) 

     buys = data[(data['type']=="ask")] 
     buys["datestamp"] = np.array(buys["timestamp"]).astype("datetime64[s]") 
     buyDates = (buys["datestamp"]).tolist() 

     plot(buyDates, buys["price"]) 

     xlabel('time') 
     ylabel('Temperature') 
     title('Temperature Chart') 
     grid(True) 


    ani = animation.FuncAnimation(fig, animate, interval=1000) 

plt.show() 
app = App() 

背景画像であり、もちろん、多くのモジュールが、任意のフィードバックが非常に高く評価されるだろう「0.png」のようないくつかの信頼性のがあります。

+0

私はこれを言及しなかったが、私のpython 3.5.2 –

+0

を使用していて申し訳ありません「しかし、それはどちらか動作しませんでした。」十分な問題の説明ではありません。あなたが表示するコードには、決して使用されない 'FigureCanvasTkAgg'のインポートから*そこにキャンバスと関係があります*がありません。これは、実際の問題であなたを助けることが不可能になります。 (再)[ask]を読むことを検討してください。その下にコメントを書くのではなく、あなたの質問を編集することができます。 – ImportanceOfBeingErnest

答えて

0

plt.show()はmatplotlibのステートマシンに現在存在数字(複数可)をホストする新しい専用のGUIウィンドウを開きます。あなたがそれを望まないなら、plt.show()を使わないでください。最高plt.xticks()としても全くそのような罪のないコマンドをpyplotを使用していない、保存側上にあるように
できcause a new window to open

また、from pylab import *を取り除きます。ピラブは、単一の名前空間にnumpyやpyplotなどのいくつかのパッケージを含むコンストラクトです。インタラクティブなノートブック型のアプリケーションではこれが望ましいかもしれませんが、デバッグを非常に面倒にするので、通常はスクリプトにとっては悪い考えです。代わりに、matplotlib APIコマンドに完全に固執しようとします。

このlinked questionは、実際にFigureCanvasTkAggNavigationToolbar2TkAggを使用して図をtkに埋め込む方法の例です。

より良いスタートがminimal example for tk embeddingが提示されるmatplotlibの例のページを見てかもしれません。

関連する問題