




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第Python+Tkinter實現(xiàn)股票K線圖的繪制目錄子窗口子窗口框架繪制K線圖在前面的文章中,我們一起學(xué)習(xí)了如何通過Python抓取東方財富網(wǎng)的實時股票數(shù)據(jù)以及如何制作成TkinterGUI程序,鏈接如下
用Python爬取股票實時數(shù)據(jù)
Tkinter制作股票數(shù)據(jù)抓取小程序,有點(diǎn)秀!
今天我們就在這個基礎(chǔ)上,在Tkinter程序中繪制K線圖,一起來看看吧
子窗口
我們今天的整體代碼還是基于上次的Tkinter股票程序,在主類MainCreator下面創(chuàng)建一個函數(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)
主要還是分三個區(qū)域,日期選擇區(qū)域,股票文件選擇區(qū)域以及K線圖展示區(qū)域
還有兩個功能性函數(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ù)據(jù),后面取date列,open列等數(shù)據(jù)
data
=
data.rename(columns={'時間':
'Date',
'開盤價':
'Open',
'收盤價':
'Close',
'最高價':
'High',
'最低價':
'Low',
'成交量(手)':
'Volume'})
#
更換列名,為后面函數(shù)變量做準(zhǔn)備
data.set_index('Date',
inplace=True)
#
設(shè)置date列為索引,覆蓋原來索引,這個時候索引還是object類型,就是字符串類型。
#
將object類型轉(zhuǎn)化成DateIndex類型,pd.DatetimeIndex是把某一列進(jìn)行轉(zhuǎn)換,同時把該列的數(shù)據(jù)設(shè)置為索引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("股票數(shù)據(jù)為空")
messbox.showerror("股票數(shù)據(jù)為空",
"請選擇合理的時間!")
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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 行政管理在生命安全中的重要作用試題及答案
- 行政管理服務(wù)創(chuàng)新試題及答案解讀
- 領(lǐng)導(dǎo)風(fēng)格與現(xiàn)代管理學(xué)的試題及答案
- 現(xiàn)代管理學(xué)的資源整合試題及答案
- 2025年自考行政管理個案分析試題及答案
- 建筑工程新技術(shù)應(yīng)用試題及答案
- 行政管理過程中公眾參與的作用試題及答案
- 領(lǐng)導(dǎo)魅力與心理學(xué)素養(yǎng)的試題及答案
- 審視2025公文處理的考試試題及答案
- 行政心理學(xué)中的團(tuán)隊溝通與信任問題試題及答案
- 2025年湖南九年級物理(BEST湘西州聯(lián)考)(含答案)
- 山東省臨沂市2025年普通高等學(xué)校招生全國統(tǒng)一考試(模擬)語文及答案(臨沂二模)
- 以患者為中心的醫(yī)教融合模式在提升醫(yī)療服務(wù)質(zhì)量中的應(yīng)用研究
- 定額〔2025〕1號文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價格水平調(diào)整的通知
- 宮頸癌護(hù)理查房-4
- 數(shù)字媒體技術(shù)概論(融媒體版) 課件 1融媒體技術(shù)基礎(chǔ)
- 叉車產(chǎn)品數(shù)據(jù)表
- 高填方、深挖路塹邊坡和軟基監(jiān)測方案
- 機(jī)器人學(xué)導(dǎo)論(課堂PPT)
- 機(jī)電設(shè)備維修與管理專業(yè)畢業(yè)論文30442
- 300MW電站回?zé)嵯到y(tǒng)的結(jié)構(gòu)優(yōu)化
評論
0/150
提交評論