我有一个程序,在启动时将打开比特币价格的matplotlib图形,并在每次价格变化时更新。然后当我关闭它时,一个全屏tkinter应用程序打开,并在角落里有一个背景图像和一个更新时钟。我想要发生的是,当我启动该程序时,全屏tkinter应用程序以背景图像打开,更新时钟在角落,和中间的matplotlib图形。基本上我想将matplotlib图嵌入到我的应用程序中。我已经尝试将图形代码放入我的类并调用它,但这只是给出了前面提到的结果。我试图取代plt.show()
与此:将matplotlib嵌入到tkinter应用程序
canvas = FigureCanvasTkAgg(fig, self) canvas.show() canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
但随后的程序没有启动的。无论我把它放在脚本中的哪个位置,都会给出像''self'没有被定义'的错误,当我直接用它替换plt.show()
,并且当我尝试将它整合到类中时'画布'没有被定义'。这里是低于全码:
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”,这是背景图像,当然还有很多模块,但任何反馈,将不胜感激。
对不起,我没有提到这一点,但我使用的是python 3.5.2 –
“但这也行不通。”不是一个足够的问题描述。您显示的代码没有*“与canvas相关的内容”*,它从从未使用过的'FigureCanvasTkAgg'的导入appart。这使得无法帮助你解决实际问题。考虑(重新)阅读[问]。你可以编辑你的问题,而不是在它下面写下评论。 – ImportanceOfBeingErnest