欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python+Tkinter實(shí)現(xiàn)股票K線圖的繪制

 更新時(shí)間:2022年08月25日 10:37:16   作者:周蘿卜  
K線圖又稱蠟燭圖,常用說(shuō)法是“K線”。K線是以每個(gè)分析周期的開盤價(jià)、最高價(jià)、最低價(jià)和收盤價(jià)繪制而成。本文將利用Python+Tkinter實(shí)現(xiàn)股票K線圖的繪制,需要的可以參考一下

在前面的文章中,我們一起學(xué)習(xí)了如何通過(guò) Python 抓取東方財(cái)富網(wǎng)的實(shí)時(shí)股票數(shù)據(jù)以及如何制作成 Tkinter GUI 程序,鏈接如下

用 Python 爬取股票實(shí)時(shí)數(shù)據(jù) 

Tkinter制作股票數(shù)據(jù)抓取小程序,有點(diǎn)秀!

今天我們就在這個(gè)基礎(chǔ)上,在 Tkinter 程序中繪制 K 線圖,一起來(lái)看看吧

子窗口

我們今天的整體代碼還是基于上次的 Tkinter 股票程序,在主類 MainCreator 下面創(chuàng)建一個(gè)函數(shù) create_subwindow

????def?create_subwindow(self):
????????t?=?ttk.Toplevel()
????????t.wm_title("K線圖")
????????sub_window?=?SubWindiw()
????????sub_window.subWindow(t)

我們這里使用 Toplevel 來(lái)創(chuàng)建子窗口,再來(lái)看看子窗口相關(guān)的代碼

class?SubWindiw:
????def?__init__(self):
????????pass
????def?all_files(self):
??????...
????def?getDate(self):
??????...
????def?subWindow(self,?root_frame):
??????...
????def?go(self):
??????...

對(duì)于子窗口代碼,subWindow 函數(shù)是子窗口的主要函數(shù)

子窗口框架

子窗口主要代碼如下

????def?subWindow(self,?root_frame):
????????file_list?=?self.all_files()

????????#?創(chuàng)建主框架
????????main_frame?=?ttk.Frame(root_frame)
????????main_frame.pack()

????????#?在主框架下創(chuàng)建股票日期輸入框子框架
????????date_frame?=?ttk.Frame(main_frame,?relief=tix.SUNKEN)
????????date_frame.pack(fill=X,?side=TOP)
????????#?創(chuàng)建標(biāo)簽‘開始日期'
????????date_start_label?=?ttk.Label(date_frame,?text='開始日期')
????????date_start_label.pack(side=LEFT)
????????#?創(chuàng)建開始日期代碼輸入框
????????re_date?=?self.getDate()
????????self.de_start?=?ttk.DateEntry(date_frame,?startdate=re_date)
????????self.de_start.pack(side=LEFT,?padx=4,?pady=4)
????????#?創(chuàng)建標(biāo)簽‘結(jié)束日期'
????????date_end_label?=?ttk.Label(date_frame,?text='結(jié)束日期')
????????date_end_label.pack(side=LEFT)
????????#?創(chuàng)建結(jié)束日期代碼輸入框
????????self.de_end?=?ttk.DateEntry(date_frame)
????????self.de_end.pack(side=LEFT,?padx=4,?pady=4)

????????#?在主框架下創(chuàng)建查詢按鈕子框架
????????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)

????????#?創(chuàng)建查詢按鈕并設(shè)置功能
????????stock_find?=?ttk.Button(search_frame,?text='查詢',?command=self.go)
????????stock_find.pack(pady=4,?expand=YES,?side=LEFT)

????????#?創(chuàng)建股票圖形輸出框架
????????self.stock_graphics?=?tk.Frame(root_frame,?relief=tix.RAISED)
????????self.stock_graphics.pack(expand=1,?fill=tix.BOTH,?anchor=tix.CENTER)

主要還是分三個(gè)區(qū)域,日期選擇區(qū)域,股票文件選擇區(qū)域以及K線圖展示區(qū)域

還有兩個(gè)功能性函數(shù) 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("股票文件為空",?"請(qǐng)選擇股票數(shù)據(jù)文件!")
????????????return
????????stock_data?=?pd.read_csv(gupiao_file)
????????data?=?stock_data.loc[:,?['時(shí)間',?'開盤價(jià)',
??????????????????????????????????'收盤價(jià)',?'最高價(jià)',?'最低價(jià)',?'成交量(手)']]??#?:取所有行數(shù)據(jù),后面取date列,open列等數(shù)據(jù)
????????data?=?data.rename(columns={'時(shí)間':?'Date',?'開盤價(jià)':?'Open',
????????????????????????????????????'收盤價(jià)':?'Close',?'最高價(jià)':?'High',?'最低價(jià)':?'Low',
????????????????????????????????????'成交量(手)':?'Volume'})??#?更換列名,為后面函數(shù)變量做準(zhǔn)備
????????data.set_index('Date',?inplace=True)??#?設(shè)置date列為索引,覆蓋原來(lái)索引,這個(gè)時(shí)候索引還是 object 類型,就是字符串類型。
????????#?將object類型轉(zhuǎn)化成 DateIndex 類型,pd.DatetimeIndex 是把某一列進(jìn)行轉(zhuǎn)換,同時(shí)把該列的數(shù)據(jù)設(shè)置為索引 index。
????????data.index?=?pd.DatetimeIndex(data.index)
????????data?=?data.sort_index(ascending=True)??#?將時(shí)間順序升序,符合時(shí)間序列
????????data?=?data[data.index?<?end_date][data.index?>?start_date]

????????if?not?data.values.any():
????????????print("股票數(shù)據(jù)為空")
????????????messbox.showerror("股票數(shù)據(jù)為空",?"請(qǐng)選擇合理的時(shí)間!")
????????????return
????????my_color?=?mpf.make_marketcolors(up='r',
?????????????????????????????????????????down='g',
?????????????????????????????????????????edge='inherit',
?????????????????????????????????????????wick='inherit',
?????????????????????????????????????????volume='inherit')
????????#?設(shè)置圖表的背景色
????????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)??#?設(shè)置tkinter繪制區(qū)
????????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)

我們通過(guò) Matplotlib + mplfinance 來(lái)繪制K線圖

首先是通過(guò) Pandas 來(lái)處理數(shù)據(jù),把我們爬取到的數(shù)據(jù)處理成 mplfinance 需要的格式,如下

接下來(lái)只需要調(diào)用plot函數(shù)即可

self.fig,?self.axlist?=?mpf.plot(data,?style=my_style,?type='candle',
?????????????????????????????????????????mav=(5,?10,?20),?volume=True,?show_nontrading=False,?returnfig=True)

到此這篇關(guān)于Python+Tkinter實(shí)現(xiàn)股票K線圖的繪制的文章就介紹到這了,更多相關(guān)Python Tkinter股票K線圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 圖文詳解Python中如何簡(jiǎn)單地解決Microsoft?Visual?C++?14.0報(bào)錯(cuò)

    圖文詳解Python中如何簡(jiǎn)單地解決Microsoft?Visual?C++?14.0報(bào)錯(cuò)

    有的時(shí)候安裝python依賴包的時(shí)候,報(bào)錯(cuò)信息"Microsoft?visual?c++?14.0?is?required"的解決辦法,下面這篇文章主要給大家介紹了關(guān)于Python中如何簡(jiǎn)單地解決Microsoft?Visual?C++?14.0報(bào)錯(cuò)的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • Python中列表(list)操作方法匯總

    Python中列表(list)操作方法匯總

    這篇文章主要介紹了Python中列表(list)操作方法匯總,非常實(shí)用的技巧,需要的朋友可以參考下
    2014-08-08
  • Python查找不限層級(jí)Json數(shù)據(jù)中某個(gè)key或者value的路徑方式

    Python查找不限層級(jí)Json數(shù)據(jù)中某個(gè)key或者value的路徑方式

    今天小編就為大家分享一篇Python查找不限層級(jí)Json數(shù)據(jù)中某個(gè)key或者value的路徑方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Python中常見的數(shù)制轉(zhuǎn)換有哪些

    Python中常見的數(shù)制轉(zhuǎn)換有哪些

    在本篇文章里小編給大家整理的是一篇關(guān)于Python中常見的數(shù)制轉(zhuǎn)換例舉內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)下。
    2020-05-05
  • Python程序打包工具py2exe和PyInstaller詳解

    Python程序打包工具py2exe和PyInstaller詳解

    這篇文章主要介紹了Python程序打包工具py2exe和PyInstaller詳解,如果可以提前將程序打包成 Windows平臺(tái)的 .exe 文件或者是Linux下的 .sh 腳本,那么使用起來(lái)就會(huì)方便很多,需要的朋友可以參考下
    2019-06-06
  • MATLAB中text函數(shù)使用的語(yǔ)法與示例代碼

    MATLAB中text函數(shù)使用的語(yǔ)法與示例代碼

    text函數(shù)的功能是向數(shù)據(jù)點(diǎn)添加文本說(shuō)明,下面這篇文章主要給大家介紹了關(guān)于MATLAB中text函數(shù)使用的語(yǔ)法與示例的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-05-05
  • django認(rèn)證系統(tǒng) Authentication使用詳解

    django認(rèn)證系統(tǒng) Authentication使用詳解

    這篇文章主要介紹了django認(rèn)證系統(tǒng) Authentication使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python通過(guò)文本和圖片生成詞云圖

    Python通過(guò)文本和圖片生成詞云圖

    這篇文章主要介紹了Python通過(guò)文本和圖片生成詞云圖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Python變量的賦值、淺拷貝和深拷貝詳解

    Python變量的賦值、淺拷貝和深拷貝詳解

    這篇文章主要介紹了Python變量的賦值、淺拷貝和深拷貝詳解,python中為聲明一個(gè)變量有三種方法:賦值、淺拷貝、深拷貝,相信每個(gè)pythoner或多或少都知道他們之間的區(qū)別,但在某些點(diǎn)上,還是會(huì)踩坑,這篇文章記錄下所有關(guān)于這三者區(qū)別的疑問(wèn),需要的朋友可以參考下
    2023-11-11
  • python字符串替換第一個(gè)字符串的方法

    python字符串替換第一個(gè)字符串的方法

    這篇文章主要介紹了python字符串替換第一個(gè)字符串的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06

最新評(píng)論