如何更改特金特动画图形间隔



所以我有一个animate((函数,它每秒在我的tkinter应用程序结束时调用,看起来像这样ani = animation.FuncAnimation(fig, animate, interval=1000)

函数animate((被调用,下面列出了该函数以及图形和子图。

我的问题是如何使按钮(按钮1000(更改kline_data间隔?我尝试将初始间隔设置为"1m"或1 分钟,然后单击一个按钮并让它对"5m"、"30m"或"1h"间隔进行动画处理。

kline_data = client.get_klines(symbol='ETHUSDT', interval='1m', limit=30)

下面是代码,尽管部分被取出,因为这是一个更大项目的一部分。任何帮助将不胜感激!

from binance.client import Client
client = Client(api_key, api_secret)

graph_window = tk.Tk()
fig = Figure(figsize=(7, 5), tight_layout=True)
a = fig.add_subplot(111)
def animate(i):
kline_data = client.get_klines(symbol='ETHUSDT', interval='1m', limit=30)
df = pd.DataFrame(kline_data).drop([7, 9, 10, 11], axis=1)
df.columns = ['Open Time', 'Open', 'High', 'Low', 'Close', 'Volume', 'Close Time', 'Num of Trades']
df[['Open', 'High', 'Low', 'Close', 'Volume']] = df[['Open', 'High', 'Low', 'Close', 'Volume']].astype(
float)
df['Open Time'] = pd.to_datetime(df['Open Time'], unit='ms')
df['Close Time'] = pd.to_datetime(df['Close Time'], unit='ms')
df['EMA7'] = df['Close'].ewm(span=7, adjust=False).mean()
df['SMA7'] = df['Close'].rolling(7).mean()
a.clear()
a.yaxis.tick_right()
a.margins(x=0.03)
a.set_title('Last Price of ETHUSDT: ' + str(df['Close'][29]))
df.plot(x='Close Time', y='Close', ax=a)
df.plot(x='Close Time', y='EMA7', ax=a)
df.plot(x='Close Time', y='SMA7', ax=a)
canvas = FigureCanvasTkAgg(fig, graph_container)
canvas.draw()
canvas.get_tk_widget().pack()
labelframe = tk.LabelFrame(controls, borderwidth=5, text='Graph Controls', labelanchor='n', pady=5)
button0000=ttk.Label(labelframe, text="Time:")
button1000=tk.Button(labelframe, text="1m")
ani = animation.FuncAnimation(fig, animate, interval=1000)
graph_window.mainloop()

凭借@jasonharper的洞察力,能够通过将全局变量设置为"1m"来解决此问题。 然后,我创建了一个函数,该函数将更改按下按钮时的间隔。

这是工作代码!

编辑:大部分内容被遗漏了,这样做可能会在将来使用户感到困惑。以下是完整的代码以供参考。请注意,此项目是不久前完成的,因此依赖项可能已过时。https://github.com/prestonkelly/Mastermind/blob/master/app.py

from binance.client import Client
client = Client(api_key, api_secret)
import tkinter as tk
from tkinter import ttk
from matplotlib.figure import Figure
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.animation as animation
import pandas as pd
graph_window = tk.Tk()
fig = Figure(figsize=(7, 5), tight_layout=True)
a = fig.add_subplot(111)

interval = '1m'
def button_changing(id):
global interval
if id == 1:
interval = '30m'

def animate(i):
kline_data = client.get_klines(symbol='ETHUSDT', interval=interval, limit=30)
df = pd.DataFrame(kline_data).drop([7, 9, 10, 11], axis=1)
df.columns = ['Open Time', 'Open', 'High', 'Low', 'Close', 'Volume', 'Close Time', 'Num of Trades']
df[['Open', 'High', 'Low', 'Close', 'Volume']] = df[['Open', 'High', 'Low', 'Close', 'Volume']].astype(
float)
df['Open Time'] = pd.to_datetime(df['Open Time'], unit='ms')
df['Close Time'] = pd.to_datetime(df['Close Time'], unit='ms')
date_values = df['Close Time']
close_values = df['Close']
df['EMA7'] = df['Close'].ewm(span=7, adjust=False).mean()
df['SMA7'] = df['Close'].rolling(7).mean()
a.clear()
a.yaxis.tick_right()
a.margins(x=0.03)
a.set_title('Last Price of ETHUSDT: ' + str(df['Close'][29]))
df.plot(x='Close Time', y='Close', ax=a)
df.plot(x='Close Time', y='EMA7', ax=a)
df.plot(x='Close Time', y='SMA7', ax=a)

canvas = FigureCanvasTkAgg(fig, graph_window)
canvas.draw()
canvas.get_tk_widget().pack()
labelframe = tk.LabelFrame(graph_window, borderwidth=5, text='Graph Controls', labelanchor='n', pady=5)
button0000=ttk.Label(labelframe, text="Time:")
button1000=tk.Button(labelframe, text="1m", command=lambda: button_changing(1))
ani = animation.FuncAnimation(fig, animate, interval=1000)
graph_window.mainloop()

最新更新