焦点要闻:Python+Tkinter实现股票K线图的绘制
目录
子窗口子窗口框架绘制K线图在前面的文章中,我们一起学习了如何通过 Python 抓取东方财富网的实时股票数据以及如何制作成 Tkinter GUI 程序,链接如下
用 Python 爬取股票实时数据
Tkinter制作股票数据抓取小程序,有点秀!
(资料图片)
今天我们就在这个基础上,在 Tkinter 程序中绘制 K 线图,一起来看看吧
子窗口
我们今天的整体代码还是基于上次的 Tkinter 股票程序,在主类MainCreator
下面创建一个函数create_subwindow
def create_subwindow(self): t = ttk.Toplevel() t.wm_title("K线图") sub_window = SubWindiw() sub_window.subWindow(t)
我们这里使用Toplevel
来创建子窗口,再来看看子窗口相关的代码
class SubWindiw: def __init__(self): pass def all_files(self): ... def getDate(self): ... def subWindow(self, root_frame): ... def go(self): ...
对于子窗口代码,subWindow
函数是子窗口的主要函数
子窗口框架
子窗口主要代码如下
def subWindow(self, root_frame): file_list = self.all_files() # 创建主框架 main_frame = ttk.Frame(root_frame) main_frame.pack() # 在主框架下创建股票日期输入框子框架 date_frame = ttk.Frame(main_frame, relief=tix.SUNKEN) date_frame.pack(fill=X, side=TOP) # 创建标签‘开始日期" date_start_label = ttk.Label(date_frame, text="开始日期") date_start_label.pack(side=LEFT) # 创建开始日期代码输入框 re_date = self.getDate() self.de_start = ttk.DateEntry(date_frame, startdate=re_date) self.de_start.pack(side=LEFT, padx=4, pady=4) # 创建标签‘结束日期" date_end_label = ttk.Label(date_frame, text="结束日期") date_end_label.pack(side=LEFT) # 创建结束日期代码输入框 self.de_end = ttk.DateEntry(date_frame) self.de_end.pack(side=LEFT, padx=4, pady=4) # 在主框架下创建查询按钮子框架 search_frame = ttk.Frame(main_frame, relief=tix.SUNKEN) search_frame.pack(fill=X, side=TOP) # 文件选择框 search_label = ttk.Label(search_frame, text="选择股票文件") search_label.pack(side=LEFT) values = file_list self.cbo = ttk.Combobox( master=search_frame, values=values, width=45, ) self.cbo.pack(side=LEFT, expand=YES, pady=5, fill=X) # 占位 check button cb = ttk.Checkbutton(search_frame, text="占位") # cb.pack(side=LEFT, padx=5, fill=X) # 创建查询按钮并设置功能 stock_find = ttk.Button(search_frame, text="查询", command=self.go) stock_find.pack(pady=4, expand=YES, side=LEFT) # 创建股票图形输出框架 self.stock_graphics = tk.Frame(root_frame, relief=tix.RAISED) self.stock_graphics.pack(expand=1, fill=tix.BOTH, anchor=tix.CENTER)
主要还是分三个区域,日期选择区域,股票文件选择区域以及K线图展示区域
还有两个功能性函数all_files
和getDate
all_files
def all_files(self): file_list = [] for root, dirs, files in os.walk("./"): for f in files: if "csv" in f and "days" in f: file_list.append(f) return file_list
getDate
def getDate(self): today = datetime.datetime.now() offset = datetime.timedelta(days=-1) re_date = (today + offset).strftime("%Y/%m/%d") return today + offset
绘制K线图
最后我们看看绘制K线图的代码
def go(self): code_name = self.cbo.get() start_date = self.de_start.entry.get() end_date = self.de_end.entry.get() gupiao_file = self.cbo.get() if not gupiao_file: messbox.showerror("股票文件为空", "请选择股票数据文件!") return stock_data = pd.read_csv(gupiao_file) data = stock_data.loc[:, ["时间", "开盘价", "收盘价", "最高价", "最低价", "成交量(手)"]] # :取所有行数据,后面取date列,open列等数据 data = data.rename(columns={"时间": "Date", "开盘价": "Open", "收盘价": "Close", "最高价": "High", "最低价": "Low", "成交量(手)": "Volume"}) # 更换列名,为后面函数变量做准备 data.set_index("Date", inplace=True) # 设置date列为索引,覆盖原来索引,这个时候索引还是 object 类型,就是字符串类型。 # 将object类型转化成 DateIndex 类型,pd.DatetimeIndex 是把某一列进行转换,同时把该列的数据设置为索引 index。 data.index = pd.DatetimeIndex(data.index) data = data.sort_index(ascending=True) # 将时间顺序升序,符合时间序列 data = data[data.index < end_date][data.index > start_date] if not data.values.any(): print("股票数据为空") messbox.showerror("股票数据为空", "请选择合理的时间!") return my_color = mpf.make_marketcolors(up="r", down="g", edge="inherit", wick="inherit", volume="inherit") # 设置图表的背景色 my_style = mpf.make_mpf_style(marketcolors=my_color, figcolor="#002B36", facecolor="#002B36", edgecolor="w", # gridcolor="(0.82, 0.83, 0.85)", rc={"font.family": "SimHei", "xtick.labelcolor": "white", "ytick.labelcolor": "white", "axes.labelcolor": "white", }) self.fig, self.axlist = mpf.plot(data, style=my_style, type="candle", mav=(5, 10, 20), volume=True, show_nontrading=False, returnfig=True) canvas = FigureCanvasTkAgg(self.fig, master=self.stock_graphics) # 设置tkinter绘制区 if len(self.stock_graphics.winfo_children()) == 2: self.stock_graphics.winfo_children()[0].destroy() canvas.draw() canvas._tkcanvas.pack(side=BOTTOM, fill=BOTH, expand=1)
我们通过 Matplotlib + mplfinance 来绘制K线图
首先是通过 Pandas 来处理数据,把我们爬取到的数据处理成 mplfinance 需要的格式,如下
接下来只需要调用plot
函数即可
self.fig, self.axlist = mpf.plot(data, style=my_style, type="candle", mav=(5, 10, 20), volume=True, show_nontrading=False, returnfig=True)
到此这篇关于Python+Tkinter实现股票K线图的绘制的文章就介绍到这了,更多相关Python Tkinter股票K线图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 1联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 2亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 3现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 4如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 5AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 6转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 7充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 8好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 9名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?
- 10亚马逊云科技成立量子网络中心致力解决量子计算领域的挑战