Python+Tkinter實現(xiàn)股票K線圖的繪制_第1頁
Python+Tkinter實現(xiàn)股票K線圖的繪制_第2頁
Python+Tkinter實現(xiàn)股票K線圖的繪制_第3頁
Python+Tkinter實現(xiàn)股票K線圖的繪制_第4頁
Python+Tkinter實現(xiàn)股票K線圖的繪制_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論