




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第Python+Tkinter實(shí)現(xiàn)股票K線圖的繪制目錄子窗口子窗口框架繪制K線圖在前面的文章中,我們一起學(xué)習(xí)了如何通過Python抓取東方財(cái)富網(wǎng)的實(shí)時(shí)股票數(shù)據(jù)以及如何制作成TkinterGUI程序,鏈接如下
用Python爬取股票實(shí)時(shí)數(shù)據(jù)
Tkinter制作股票數(shù)據(jù)抓取小程序,有點(diǎn)秀!
今天我們就在這個(gè)基礎(chǔ)上,在Tkinter程序中繪制K線圖,一起來看看吧
子窗口
我們今天的整體代碼還是基于上次的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來創(chuàng)建子窗口,再來看看子窗口相關(guān)的代碼
class
SubWindiw:
def
__init__(self):
pass
def
all_files(self):
...
def
getDate(self):
...
def
subWindow(self,
root_frame):
...
def
go(self):
...
對于子窗口代碼,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("股票文件為空",
"請選擇股票數(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列為索引,覆蓋原來索引,這個(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ù)為空",
"請選擇合理的時(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,
'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
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB32/T 4274-2022工業(yè)互聯(lián)網(wǎng)安全脆弱性分析與檢測規(guī)范
- DB32/T 4155.10-2021全民健康信息平臺(tái)共享數(shù)據(jù)集規(guī)范第10部分:醫(yī)療質(zhì)控
- DB32/T 4057-2021禽肉中銅、鎘等18種元素含量的測定電感耦合等離子體質(zhì)譜法
- DB32/T 4002-2021大跨徑懸索橋預(yù)制平行鋼絲索股通用技術(shù)條件
- DB32/T 3872-2020電動(dòng)滑板車安全技術(shù)規(guī)范
- DB32/T 3763-2020新型冠狀病毒肺炎疫情防控居家隔離技術(shù)規(guī)范
- DB32/T 3761.48-2021新型冠狀病毒肺炎疫情防控技術(shù)規(guī)范第48部分:人員密集型場所快速調(diào)查和處置
- DB32/T 3729-2020融合媒體內(nèi)容平臺(tái)運(yùn)營及托管服務(wù)音視頻文件交互規(guī)范
- DB32/T 3607-2019監(jiān)獄醫(yī)院設(shè)施設(shè)備配置規(guī)范
- DB32/T 3533-2019梨樹單主枝連體型栽培技術(shù)規(guī)程
- 車險(xiǎn)查勘定損中級培訓(xùn)水淹車處理指引及定損培訓(xùn)
- GB/T 29745-2013公共停車場(庫)信息聯(lián)網(wǎng)通用技術(shù)要求
- 員工請假審批流程圖
- “雙減”背景下高中語文作業(yè)的設(shè)計(jì)
- 2023年考研《法碩(非法學(xué))》真題及答案
- 供應(yīng)室技能考核操作標(biāo)準(zhǔn)
- 力平之獨(dú)特的血脂管理課件
- (完整版)土方回填專項(xiàng)施工方案
- 全國2021年4月自學(xué)考試00322中國行政史試題答案
- 外周神經(jīng)復(fù)發(fā)性神經(jīng)鞘瘤的顯微外科治療課件
- DB21∕T 3384-2021 空氣源熱泵系統(tǒng)工程技術(shù)規(guī)程
評論
0/150
提交評論