from tkinter import *
import os,time,shutil,datetime
from tkinter import ttk
from openpyxl import load_workbook
from openpyxl import Workbook
from tkinter.messagebox import *
class Login():
def __init__(self, master=None):
self.root = master #定义内部变量root
w = 300
h = 200
ws = self.root.winfo_screenwidth()
hs = self.root.winfo_screenheight()
x = ws / 2 - w / 2
y = hs / 2 - h / 2
self.root.geometry('%dx%d+%d+%d' % (w,h,x,y))
self.username = StringVar()
self.password = StringVar()
#self.create_page()
def create_page(self):
self.page = Frame(self.root) #创建Frame
self.page.grid()
Label(self.page).grid(row=0, stick=W)
Label(self.page,text = '用户名: ').grid(row=1,stick=W,pady=10)
Entry(self.page,textvariable=self.username).grid(row=1,column=1,stick=E)
testCMD = self.root.register(self.test)
Label(self.page,text = '密 码: ').grid(row=2,stick=W,pady=10)
Entry(self.page,textvariable=self.password,show='*',validate="key",\
validatecommand=(testCMD,'%P')).grid(row=2,column=1,stick=E)
Button(self.page, text='确认',
command=self.login_check).grid(row=3,stick=W,pady=10)
Button(self.page, text='退出',
command=self.page.quit).grid(row=3,column=1,stick=E)
return
def test(self,content):#密码只能是数字
if content.isdigit():
return True
else:
return False
def login_check(self):
name = self.username.get()
secret = self.password.get()
if name=='admin' and secret=='123456':
self.page.destroy()
Main_page(root).create_page()
else:
showinfo(title='错误',message='账号或密码错误!')
return
#主界面函数MainPage.py:
class Main_page():
def __init__(self, master=None):
self.root = master #定义内部变量root
w = 600
h = 500
ws = root.winfo_screenwidth()
hs = root.winfo_screenheight()
x = ws / 2 - w / 2
y = hs / 2 - h / 2
self.root.geometry('%dx%d+%d+%d' % (w,h,x,y))
def create_page(self):
self.forward_rate = Forward_frame(self.root)# 创建不同Frame
self.for_day = Forday_frame(self.root)
self.accumulate_up = Ccumulate_frame(self.root)
self.cacl_rate_days = Calc_turn_days_frame(self.root)
self.cacl_amount = Amount_frame(self.root)
self.forwad_amount = Amount_Forward_frame(self.root)
self.add_data = Add_frame(self.root)
self.set_sys = Set_frame(self.root)
self.a_bout = About_frame(self.root)
menubar = Menu(self.root)
colculate_menu = Menu(menubar,tearoff=False)
colculate_menu.add_command(label='递进换手率',command=self.forward)
colculate_menu.add_command(label='按天递进',command=self.forday)
colculate_menu.add_command(label='累计换手率',command=self.accumulate)
colculate_menu.add_command(label='指定天数',command=self.rate_days)
colculate_menu.add_command(label='指定成交额',command=self.amount)
colculate_menu.add_command(label='递进成交额',command=self.amount_forward)
colculate_menu.add_separator()
colculate_menu.add_command(label='退出', command=_quit)
menubar.add_cascade(label='计算',menu=colculate_menu)
menubar.add_command(label='补数据',command=self.add)
menubar.add_command(label='设置', command=self._set)
menubar.add_command(label='关于', command=self._about)
self.root.config(menu=menubar)
self.root['menu'] = menubar # 设置菜单栏
self.forward()
#self.result.create_page()
def forward(self):#递进换手率
self.accumulate_up.grid_forget()
self.add_data.grid_forget()
self.a_bout.grid_forget()
self.set_sys.grid_forget()
self.cacl_rate_days.grid_forget()
self.cacl_amount.grid_forget()
self.forwad_amount.grid_forget()
self.for_day.grid_forget()
self.forward_rate.grid()
def forday(self):#按天递进
self.accumulate_up.grid_forget()
self.add_data.grid_forget()
self.a_bout.grid_forget()
self.set_sys.grid_forget()
self.cacl_rate_days.grid_forget()
self.cacl_amount.grid_forget()
self.forwad_amount.grid_forget()
self.forward_rate.grid_forget()
self.for_day.grid()
def accumulate(self):#累计换手率
self.forward_rate.grid_forget()
self.for_day.grid_forget()
self.add_data.grid_forget()
self.a_bout.grid_forget()
self.set_sys.grid_forget()
self.cacl_rate_days.grid_forget()
self.cacl_amount.grid_forget()
self.forwad_amount.grid_forget()
self.accumulate_up.grid()
def rate_days(self):#指定天数
self.forward_rate.grid_forget()
self.for_day.grid_forget()
self.add_data.grid_forget()
self.a_bout.grid_forget()
self.set_sys.grid_forget()
self.accumulate_up.grid_forget()
self.cacl_amount.grid_forget()
self.forwad_amount.grid_forget()
self.cacl_rate_days.grid()
def amount(self):#指定成交额
self.forward_rate.grid_forget()
self.for_day.grid_forget()
self.add_data.grid_forget()
self.a_bout.grid_forget()
self.set_sys.grid_forget()
self.accumulate_up.grid_forget()
self.cacl_rate_days.grid_forget()
self.forwad_amount.grid_forget()
self.cacl_amount.grid()
def amount_forward(self):#递进成交额
self.forward_rate.grid_forget()
self.for_day.grid_forget()
self.add_data.grid_forget()
self.a_bout.grid_forget()
self.set_sys.grid_forget()
self.accumulate_up.grid_forget()
self.cacl_rate_days.grid_forget()
self.cacl_amount.grid_forget()
self.forwad_amount.grid()
def add(self):
self.forward_rate.grid_forget()
self.for_day.grid_forget()
self.accumulate_up.grid_forget()
self.a_bout.grid_forget()
self.set_sys.grid_forget()
self.cacl_rate_days.grid_forget()
self.cacl_amount.grid_forget()
self.forwad_amount.grid_forget()
self.add_data.grid()
def _set(self):
self.add_data.grid_forget()
self.for_day.grid_forget()
self.forward_rate.grid_forget()
self.accumulate_up.grid_forget()
self.a_bout.grid_forget()
self.cacl_rate_days.grid_forget()
self.cacl_amount.grid_forget()
self.forwad_amount.grid_forget()
self.set_sys.grid()
def _about(self):
self.add_data.grid_forget()
self.for_day.grid_forget()
self.forward_rate.grid_forget()
self.accumulate_up.grid_forget()
self.set_sys.grid_forget()
self.cacl_rate_days.grid_forget()
self.cacl_amount.grid_forget()
self.forwad_amount.grid_forget()
self.a_bout.grid()
#递进换手率
class Forward_frame(Frame):
def __init__(self, master=None):
global lb
Frame.__init__(self, master)
self.mylist = ['换手率','起始日期','递进周期']
self.need_file = mypath+'base\\name_code.xlsx'
self.entry_var = [IntVar(),IntVar()]
self.date_var = []
self.create_page()
def create_page(self):
Label(self, text='递进换手率计算',font = ('黑体',14,'normal')).grid(
row=0, column=1, stick=W, padx=20, pady=10)
i = 1
for each in self.mylist:
self.entry_var.append(IntVar())
Label(self,text = each).grid(row=i,stick=W,padx=60,pady=10)
i += 1
Entry(self, textvariable=self.entry_var[0],width=8).grid(
row=1,column=1, stick=W,padx=60,pady=10)
self.entry_var[0].set(100)
Entry(self, textvariable=self.entry_var[-1],width=8).grid(
row=3,column=1, stick=W,padx=60,pady=10)
self.entry_var[-1].set(15)
self.beginday = ttk.Combobox(self,width=10,textvariable=self.date_var)
self.beginday.grid(row=2,column=1,stick=W,padx=60,pady=10)
self.beginday['value'] = date_list
self.beginday.current(0)
Button(self, text='选择文件',command=self.get_file).grid(
row=11,column=1,stick=E,padx=20,pady=60)
def calc_forward(self):
Button(self, text='确定',state='disable').grid(
row=12,column=1,stick=W,pady=10)
if self.entry_var[0].get() > 500 or self.entry_var[0].get() < 5:
self.entry_var[0].set('100')
if self.beginday.get() < '20010101' or self.beginday.get() > today_date:
self.beginday.set(date_list[0])
if self.entry_var[-1].get() < 2 or self.entry_var[-1].get() > 300:
self.entry_var[-1].set('15')
need_list = tr.get_code(self.need_file)#提取所有股票代码
begin_time = datetime.datetime.now()
tr.forward_day(mypath,desk_path,need_list,self.entry_var[0].get(),\
self.beginday.get(),self.entry_var[-1].get())
total_time = (datetime.datetime.now()-begin_time).seconds
print('用时%d分%d秒'%(total_time//60,total_time%60)+'\n')
Button(self, text='确定',
command=self.calc_forward).grid(
row=12, column=1, stick=W, pady=10)
def get_file(self):
self.need_file = tr.get_file()
Button(self, text='确定',\
command=self.calc_forward).grid(
row=12, column=1, stick=W, pady=10)
class Forday_frame(Frame):
def __init__(self, master=None):
global lb
Frame.__init__(self, master)
self.mylist = ['递进天数','起始日期','占位项']
self.need_file = mypath+'base\\name_code.xlsx'
self.entry_var = [IntVar(),IntVar()]
self.date_var = []
self.create_page()
def create_page(self):
Label(self, text='按天递进计算',font = ('黑体',14,'normal')).grid(
row=0, column=1, stick=W, padx=20, pady=10)
i = 1
for each in self.mylist:
self.entry_var.append(IntVar())
Label(self,text = each).grid(row=i,stick=W,padx=60,pady=10)
i += 1
Entry(self, textvariable=self.entry_var[0],width=8).grid(
row=1,column=1, stick=W,padx=60,pady=10)
self.entry_var[0].set(15)
Entry(self, textvariable=self.entry_var[-1],width=8,state='disable').grid(
row=3,column=1, stick=W,padx=60,pady=10)
self.entry_var[-1].set(15)
self.beginday = ttk.Combobox(self,width=10,textvariable=self.date_var)
self.beginday.grid(row=2,column=1,stick=W,padx=60,pady=10)
self.beginday['value'] = date_list
self.beginday.current(0)
Button(self, text='选择文件',command=self.get_file).grid(
row=11,column=1,stick=E,padx=20,pady=60)
def calc_forward(self):
Button(self, text='确定',state='disable').grid(
row=12,column=1,stick=W,pady=10)
if self.entry_var[0].get() > 300 or self.entry_var[0].get() < 3:
self.entry_var[0].set('15')
if self.beginday.get() < '20010101' or self.beginday.get() > today_date:
self.beginday.set(date_list[0])
if self.entry_var[-1].get() < 2 or self.entry_var[-1].get() > 300:
self.entry_var[-1].set('15')
need_list = tr.get_code(self.need_file)#提取所有股票代码
begin_time = datetime.datetime.now()
tr.day_forward(mypath,desk_path,need_list,self.entry_var[0].get(),\
self.beginday.get())
total_time = (datetime.datetime.now()-begin_time).seconds
print('用时%d分%d秒'%(total_time//60,total_time%60)+'\n')
Button(self, text='确定',
command=self.calc_forward).grid(
row=12, column=1, stick=W, pady=10)
def get_file(self):
self.need_file = tr.get_file()
Button(self, text='确定',\
command=self.calc_forward).grid(
row=12, column=1, stick=W, pady=10)
#累计换手率
class Ccumulate_frame(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.mylist = ['换手率','起始日期','计算周期']
self.need_file = mypath+'base\\name_code.xlsx'
self.entry_var = [IntVar(),IntVar()]
self.date_var = []
self.create_page()
return
def create_page(self):
Label(self, text='累计换手率计算',font = ('黑体',14,'normal')).grid(row=0, column=1, stick=W, padx=20, pady=10)
i = 1
for each in self.mylist:
Label(self, text = each).grid(row=i, stick=W, padx=60, pady=10)
i += 1
Entry(self, textvariable=self.entry_var[0],width=8).grid(
row=1,column=1, stick=W,padx=60,pady=10)
self.entry_var[0].set(100)
Entry(self, textvariable=self.entry_var[-1],width=8).grid(
row=3,column=1, stick=W,padx=60,pady=10)
self.entry_var[-1].set(5)
self.beginday = ttk.Combobox(self,width=10,textvariable=self.date_var)
self.beginday.grid(row=2,column=1,stick=W,padx=60,pady=10)
self.beginday['value'] = date_list
self.beginday.current(0)
Button(self, text='选择文件',command=self.get_file).grid(
row=11, column=1, stick=E, padx=20,pady=60)
return
def calc_rate(self):
Button(self, text='确定',state='disable').grid(row=12, column=1, stick=W, pady=10)
need_list = tr.get_code(self.need_file)#提取股票代码
if self.entry_var[0].get() > 500 or self.entry_var[0].get() < 1:
self.entry_var[0].set('100') #设置换手率范围
if self.beginday.get() < '20010101' or self.beginday.get() > today_date:
self.beginday.set(date_list[0])
if self.entry_var[-1].get() < 2 or self.entry_var[-1].get() > 300:
self.entry_var[-1].set('5')
begin_time = datetime.datetime.now()
tr.calculate_rate(mypath,desk_path,need_list,self.entry_var[0].get(),\
self.beginday.get(),self.entry_var[-1].get())
total_time = (datetime.datetime.now()-begin_time).seconds
print('用时%d分%d秒'%(total_time//60,total_time%60)+'\n')
Button(self, text='确定',\
command=self.calc_rate).grid(
row=12, column=1,stick=W, pady=10)
def get_file(self):
self.need_file = tr.get_file()
Button(self, text='确定',
command=self.calc_rate).grid(
row=12, column=1, stick=W, pady=10)
def list_box(self):
'结果显示窗'
sb = Scrollbar(root)
sb.grid(row=12, column=2,stick=N+S)
self.lb = Listbox(root,yscrollcommand=sb.set,
exportselection=False,height=5)
for i in range(2):
self.lb.insert(END,i)
self.lb.grid(row=12, column=1,stick=W, pady=10)
sb.config(command=self.lb.yview)
#指定天数换手率
class Calc_turn_days_frame(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.mylist = ['换手天数','起始日期','计算周期']
self.need_file = mypath+'base\\name_code.xlsx'
self.entry_var = [IntVar(),IntVar()]
self.date_var = []
self.create_page()
return
def create_page(self):
Label(self, text='指定天数换手率计算',font = ('黑体',14,'normal')).grid(row=0, column=1, stick=W, padx=20, pady=10)
i = 1
for each in self.mylist:
Label(self, text = each).grid(row=i, stick=W, padx=60, pady=10)
i += 1
Entry(self, textvariable=self.entry_var[0],width=8).grid(
row=1,column=1, stick=W,padx=60,pady=10)
self.entry_var[0].set(15)
Entry(self, textvariable=self.entry_var[-1],width=8).grid(
row=3,column=1, stick=W,padx=60,pady=10)
self.entry_var[-1].set(10)
self.beginday = ttk.Combobox(self,width=10,textvariable=self.date_var)
self.beginday.grid(row=2,column=1,stick=W,padx=60,pady=10)
self.beginday['value'] = date_list
self.beginday.current(0)
Button(self, text='选择文件',command=self.get_file).grid(
row=11, column=1, stick=E, padx=20,pady=60)
return
def calc_rate(self):
Button(self, text='确定',state='disable').grid(row=12, column=1, stick=W, pady=10)
need_list = tr.get_code(self.need_file)#提取股票代码
if self.entry_var[0].get() > 300 or self.entry_var[0].get() < 2:
self.entry_var[0].set('15')
if self.beginday.get() < '20010101' or self.beginday.get() > today_date:
self.beginday.set(date_list[0])
if self.entry_var[-1].get() < 2 or self.entry_var[-1].get() > 300:
self.entry_var[-1].set('10')
begin_time = datetime.datetime.now()
tr.calc_turn_days(mypath,desk_path,need_list,self.entry_var[0].get(),\
self.beginday.get(),self.entry_var[-1].get())
total_time = (datetime.datetime.now()-begin_time).seconds
print('用时%d分%d秒'%(total_time//60,total_time%60)+'\n')
Button(self, text='确定',\
command=self.calc_rate).grid(
row=12, column=1,stick=W, pady=10)
def get_file(self):
self.need_file = tr.get_file()
Button(self, text='确定',
command=self.calc_rate).grid(
row=12, column=1, stick=W, pady=10)
#累计成交金额
class Amount_frame(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.mylist = ['成交金额(亿元)','起始日期','计算周期']
self.need_file = mypath+'base\\name_code.xlsx'
self.entry_var = [IntVar(),IntVar()]
self.date_var = []
self.create_page()
return
def create_page(self):
Label(self, text='累计成交金额计算',font = ('黑体',14,'normal')).grid(row=0, column=1, stick=W, padx=20, pady=10)
i = 1
for each in self.mylist:
Label(self, text = each).grid(row=i, stick=W, padx=60, pady=10)
i += 1
Entry(self, textvariable=self.entry_var[0],width=8).grid(
row=1,column=1, stick=W,padx=60,pady=10)
self.entry_var[0].set(10)
Entry(self, textvariable=self.entry_var[-1],width=8).grid(
row=3,column=1, stick=W,padx=60,pady=10)
self.entry_var[-1].set(5)
self.beginday = ttk.Combobox(self,width=10,textvariable=self.date_var)
self.beginday.grid(row=2,column=1,stick=W,padx=60,pady=10)
self.beginday['value'] = date_list
self.beginday.current(0)
Button(self, text='选择文件',command=self.get_file).grid(
row=11, column=1, stick=E, padx=20,pady=60)
return
def calc_rate(self):
Button(self, text='确定',state='disable').grid(row=12, column=1, stick=W, pady=10)
need_list = tr.get_code(self.need_file)#提取股票代码
if self.entry_var[0].get() > 500 or self.entry_var[0].get() < 1:
self.entry_var[0].set('10') #设置成交金额范围
if self.beginday.get() < '20010101' or self.beginday.get() > today_date:
self.beginday.set(date_list[0])
if self.entry_var[-1].get() < 2 or self.entry_var[-1].get() > 100:
self.entry_var[-1].set('5')
begin_time = datetime.datetime.now()
tr.calculate_amount(mypath,desk_path,need_list,self.entry_var[0].get(),\
self.beginday.get(),self.entry_var[-1].get())
total_time = (datetime.datetime.now()-begin_time).seconds
print('用时%d分%d秒'%(total_time//60,total_time%60)+'\n')
Button(self, text='确定',\
command=self.calc_rate).grid(
row=12, column=1,stick=W, pady=10)
def get_file(self):
self.need_file = tr.get_file()
Button(self, text='确定',
command=self.calc_rate).grid(
row=12, column=1, stick=W, pady=10)
class Amount_Forward_frame(Frame):
def __init__(self, master=None):
global lb
Frame.__init__(self, master)
self.mylist = ['成交金额(亿元)','起始日期','递进周期']
self.need_file = mypath+'base\\name_code.xlsx'
self.entry_var = [IntVar(),IntVar()]
self.date_var = []
self.create_page()
def create_page(self):
Label(self, text='递进成交金额计算',font = ('黑体',14,'normal')).grid(
row=0, column=1, stick=W, padx=20, pady=10)
i = 1
for each in self.mylist:
self.entry_var.append(IntVar())
Label(self,text = each).grid(row=i,stick=W,padx=60,pady=10)
i += 1
Entry(self, textvariable=self.entry_var[0],width=8).grid(
row=1,column=1, stick=W,padx=60,pady=10)
self.entry_var[0].set(10)
Entry(self, textvariable=self.entry_var[-1],width=8).grid(
row=3,column=1, stick=W,padx=60,pady=10)
self.entry_var[-1].set(15)
self.beginday = ttk.Combobox(self,width=10,textvariable=self.date_var)
self.beginday.grid(row=2,column=1,stick=W,padx=60,pady=10)
self.beginday['value'] = date_list
self.beginday.current(0)
Button(self, text='选择文件',command=self.get_file).grid(
row=11,column=1,stick=E,padx=20,pady=60)
def calc_forward(self):
Button(self, text='确定',state='disable').grid(
row=12,column=1,stick=W,pady=10)
if self.entry_var[0].get() > 500 or self.entry_var[0].get() < 1:
self.entry_var[0].set('10')
if self.beginday.get() < '20010101' or self.beginday.get() > today_date:
self.beginday.set(date_list[0])
if self.entry_var[-1].get() < 2 or self.entry_var[-1].get() > 100:
self.entry_var[-1].set('15')
need_list = tr.get_code(self.need_file)#提取所有股票代码
begin_time = datetime.datetime.now()
tr.forward_amount(mypath,desk_path,need_list,self.entry_var[0].get(),\
self.beginday.get(),self.entry_var[-1].get())
total_time = (datetime.datetime.now()-begin_time).seconds
print('用时%d分%d秒'%(total_time//60,total_time%60)+'\n')
Button(self, text='确定',
command=self.calc_forward).grid(
row=12, column=1, stick=W, pady=10)
def get_file(self):
self.need_file = tr.get_file()
Button(self, text='确定',\
command=self.calc_forward).grid(
row=12, column=1, stick=W, pady=10)
#补数据
class Add_frame(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.add_list = ['新股','日线','除权','流通盘']
self.add_var = []
self.need_file = mypath+'base\\name_code.xlsx'#默认所有A股
self.create_page()
def create_page(self):
Label(self, text='补数据',font = ('黑体',14,'normal')).grid(row=0,column=3,padx=00,pady=60,stick=W)
j = 1
for each in self.add_list:
self.add_var.append(IntVar())
Checkbutton(self,text=each,variable=self.add_var[-1]).grid(
row= 1,column=j,padx=30,pady=10,stick=W)
self.add_var[-1].set('1')
j += 1
Button(self, text='选择文件',command=self.get_file).grid(
row=2, column=4, stick=W, padx=20,pady=60)
Button(self, text='更新',command=self.add_data).grid(
row=12, column=3, stick=W)
def get_file(self):
self.need_file = tr.get_file()
def add_data(self):
Button(self, text='选择文件',state='disable').grid(
row=2, column=4, stick=W, padx=20,pady=60)
Button(self, text='更新',state='disable').grid(
row=12, column=3, stick=W)
if self.add_var[-1].get():
tr.get_circulate(mypath,zq_path,today_date) #提取流通盘
if self.add_var[2].get():
gbbq_list = tr.get_gbbq(mypath,today_date)#更新股本变迁资料
if self.add_var[0].get() or self.add_var[1].get():#转日线
begin_time = datetime.datetime.now()
need_list = tr.get_code(self.need_file)#提取股票代码
need_list.append('sh000001') #添加上证指数
need_list = list(set(need_list))#剔除相同的代码
need_list,exist_list = tr.split_list(mypath,need_list)#分别提取转日线和补日线列表表
need_list.sort()
exist_list.sort()
file_list = tr.day2xlsx(mypath,zq_path,need_list)#转日线
tr.add_name_code(mypath,file_list)#添加名称
tr.add_circulate(mypath,file_list)#添加流通盘
tr.add_gbbq(mypath,file_list)#加股本变迁资料
total_time = (datetime.datetime.now()-begin_time).seconds
print('转日线用时%d分%d秒'%(total_time//60,total_time%60)+'\n')
#file_list = \
tr.calculate_mediary(mypath,file_list,[])#计算中间数据
if self.add_var[1].get():
begin_time = datetime.datetime.now()
tr.add_data(mypath,zq_path,exist_list)#更新日线
total_time = (datetime.datetime.now()-begin_time).seconds
print('同步日线数据用时%d分%d秒'%(total_time//60,total_time%60)+'\n')
try:
exist_list.remove('sh000001')
except:pass
if len(gbbq_list) > 0:
begin_time = datetime.datetime.now()
file_list,end_row = tr.add_gbbq(mypath,gbbq_list)#完善股本变更资料
tr.calculate_mediary(mypath,file_list,end_row)#重新计算中间
total_time = (datetime.datetime.now()-begin_time).seconds
print('更新财务数据用时%d分%d秒'%(total_time//60,total_time%60)+'\n')
date_list = get_datelist('d:\\turnover_rate\\')
Button(self, text='选择文件',command=self.get_file).grid(
row=2, column=4, stick=W, padx=20,pady=60)
Button(self, text='更新',command=self.add_data).grid(
row=12, column=3, stick=W)
_quit()
#设置
class Set_frame(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.stock_path = []
self.desktop_path = []
self.create_page()
def create_page(self):
global mypath
self.wb = load_workbook(mypath + 'sys\\path.xlsx')
self.ws = self.wb.active
for i in range(2,self.ws.max_row+1):
if self.ws.cell(i,1).value != None:
self.desktop_path.append(self.ws.cell(i,1).value)
if self.ws.cell(i,2).value != None:
self.stock_path.append(self.ws.cell(i,2).value)
Label(self, text='系统设置',
font = ('黑体',14,'normal')).grid(row=0,column=1,padx=0,pady=50,stick=W)
Label(self,text='桌面目录: ').grid(row=1,stick=W,padx=60,pady=10)
self.desktop = ttk.Combobox(
self,width=20,textvariable=self.desktop_path)
self.desktop.grid(row=1,column=1,stick=W,padx=60,pady=10)
self.desktop['value'] = self.desktop_path
self.desktop.current(0)
#self.desktop.bind("<<ComboboxSelected>>",self.save_path)
Label(self,text='证券软件目录: ').grid(row=2,stick=W,padx=60,pady=10)
self.stockpath = ttk.Combobox(
self,width=10,textvariable=self.stock_path)
self.stockpath.grid(row=2,column=1,stick=W,padx=60,pady=10)
self.stockpath['value'] = self.stock_path
self.stockpath.current(0)
#self.stockpath.bind("<<ComboboxSelected>>",self.save_path)
Button(self, text='保存',command=self.save_path).grid(
row=12, column=1, stick=W, padx=10,pady=60)
def save_path(self,*args):
global desk_path,zq_path
desk_path = self.desktop.get()
zq_path = self.stockpath.get()
x = 0
y = 0
for i in range(2,self.ws.max_row+1):
if (self.ws.cell(i,1).value == self.desktop.get()):
x = 1
if (i != 2):
a = self.ws.cell(2,1).value
self.ws.cell(2,1).value = self.desktop.get()
self.ws.cell(i,1).value = a
if (self.ws.cell(i,2).value == self.stockpath.get()):
y = 1
if (i != 2):
a = self.ws.cell(2,2).value
self.ws.cell(2,2).value = self.stockpath.get()
self.ws.cell(i,2).value = a
if x != 1:
self.ws.cell(self.ws.max_row+1,1).value = self.desktop.get()
if y != 1:
self.ws.cell(self.ws.max_row+1,2).value = self.stockpath.get()
self.wb.save(mypath + 'sys\\path.xlsx')
self.wb.close()
_quit()
return
#版本号
class About_frame(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.create_page()
def create_page(self):
Label(self, text='版本').grid()
Label(self,text='版本号:001 ').grid(
row=1,stick=W,padx=60,pady=30)
Label(self,text='版权所有,未经许可不得使用!!! '
,font = ('黑体',12,"bold"),fg="red").grid(
row=2,stick=W,padx=60,pady=30)
def get_datelist(mypath='d:\\turnover_rate\\'):
date_list = []
try:
wb = load_workbook(mypath+'data\\sh000001.xlsx')
ws = wb.active
rows = ws.max_row
for i in range(rows-3):
date_list.append(ws.cell(rows-i,1).value)
except:date_list = [today_date]
return date_list
def list_box(Frame):
'结果显示窗'
sb = Scrollbar(root)
sb.grid(row=12, column=2,stick=N+S)
lb = Listbox(root,yscrollcommand=sb.set,exportselection=False,height=5)
for i in range(2):
lb.insert(END,i)
lb.grid(row=12, column=1,stick=W, pady=10)
sb.config(command=lb.yview)
def mk_dir(mypath = 'd:\\turnover_rate\\'):
'检查目录,没有则创建'
import shutil
os.chdir('d:\\')
if not os.path.exists(mypath):
os.mkdir(mypath)
os.chdir(mypath)
if not os.path.exists('data'):
os.mkdir('data')
if not os.path.exists('base'):
os.mkdir('base')
if not os.path.exists('sys'):
os.mkdir('sys')
if not os.path.exists(mypath +'sys\\path.xlsx'):
os.chdir(mypath +'sys')
wb = Workbook()
ws = wb.active
wb.save(mypath +'sys\\path.xlsx')
wb.close()
return mypath
def _quit():
'退出'
root.quit()
root.destroy()
#主程序
desk_path = os.getcwd()
today_date = time.strftime('%Y%m%d',time.localtime(time.time()))
mypath = mk_dir()
if not os.path.exists(mypath +'sys\\turnover.py'):
try:
shutil.copyfile(desk_path+'\\turnover.py',mypath + 'sys\\turnover.py')
except:pass
sys.path.append(mypath+'sys')
sys.path = list(set(sys.path))
import turnover as tr
wb = load_workbook(mypath+'sys\\path.xlsx')
ws = wb.active
desk_path = ws.cell(2,1).value
zq_path = ws.cell(2,2).value
wb.close()
date_list = get_datelist('d:\\turnover_rate\\')
root = Tk()
root.withdraw()
root.title('换手率(天数)')
root.iconbitmap('d:\\turnover_rate\\base\\bt32.ico')
#Login(root).create_page()
Main_page(root).create_page()
root.deiconify()
root.mainloop()