在Python中显示滚动表中的实时股票数据



我试图使一个独立的GUI应用程序,显示实时价格数据从股票价格API。由于有了这个API,使这个程序基于Python要容易得多。

来自股票域的股票数据从API流式传输,并以设定的间隔(atm约500ms)存储。

我的目的是插入股票的价格信息,当该股票创下新高或新低。此外,需要根据价格(红色/蓝色)将行涂成不同的颜色

例句:

Time     | Ticker | Price 
11:00:00 | ABCD   | 109.50
11:00:50 | WXYZ   | 123.30
11:01:00 | ABCD   | 110.01
11:01:50 | EFGH   | 50.38

您可以想象,这个表很快就会填满,并且它将在交易时间全天运行,因此需要不断添加。

目前,我一直在寻找使用Tkinter,但我没有GUI相关的编程经验,所以我不确定它是否能够实现我想要的。我从虚拟数据和最坏情况(每100毫秒添加一次)开始。它看起来已经相当迟钝了,所以我不确定这是不是该走的路,特别是需要滚动条的解决方案(在Tkinter中为一组小部件添加滚动条):

import tkinter as tk
import tkinter.ttk as ttk

class StockDisplay(tk.Frame):
def __init__(self):
tk.Frame.__init__(self)
self.main_frame = tk.Frame()
self.main_frame.bind("<Configure>", lambda e: self.my_canvas.configure(scrollregion=self.my_canvas.bbox("all")))
self.main_frame.pack(fill=tk.BOTH, expand=1)
self.my_canvas = tk.Canvas(self.main_frame)
self.my_canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
self.my_scrollbar = ttk.Scrollbar(self.main_frame, orient=tk.VERTICAL, command=self.my_canvas.yview)
self.my_scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
self.my_canvas.configure(yscrollcommand=self.my_scrollbar.set)
self.second_frame = tk.Frame(self.my_canvas)
self.my_canvas.create_window((0, 0), window=self.second_frame, anchor="nw")
self.height = 0
self.init_table()
self.add_row()
def init_table(self):
tk.Label(self.second_frame, text="Time",).grid(row=self.height, column=0, padx=10)
tk.Label(self.second_frame, text="Ticker").grid(row=self.height, column=1, padx=10)
tk.Label(self.second_frame, text="Price").grid(row=self.height, column=2, padx=10)
def add_row(self):
self.height += 1
tk.Label(self.second_frame, text="Time").grid(row=self.height, column=0, padx=10)
tk.Label(self.second_frame, text="Ticker " + str(self.height)).grid(row=self.height, column=1, padx=10)
tk.Label(self.second_frame, text="Price").grid(row=self.height, column=2, padx=10)
self.reset_scrollregion()
self.after(100, self.add_row)
def reset_scrollregion(self):
self.my_canvas.configure(scrollregion=self.my_canvas.bbox("all"))

if __name__ == '__main__':
root = tk.Tk()
root.title('Tkicker')
root.geometry("500x400")
display = StockDisplay()
root.mainloop()

我的问题是:

1)。Tkinter能够实现我的目标吗?

)。如果是:是否有一个好的/更好的方法来允许这个更新表(i/e是网格方法最好的方式)?

b。)如果没有:是否有更好的GUI应用程序,我可以使用它来实现这一点?

任何建议都非常感谢。

谢谢!

显示数十万个字符串的唯一方法是使用文本小部件。我不确定上限是多少,但我用200,000行测试了它,它似乎工作得很好。您肯定不能创建200,000个标签小部件,并期望tkinter以可用的方式运行。画布还限制了它可以管理的项目的数量。

您可以在文本小部件中配置选项卡,以便您的数据按列对齐。您可以使用标签为一行或部分行添加颜色。

最新更新