股票计算主程序

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() 
 

猜你喜欢

转载自blog.csdn.net/lee2601/article/details/81084728