import datetime from tkinter import * from time import * def show_time(): strt.set(strftime('%H:%M:%S')) root.after(1000, show_time) def WHATDAY(yy,mm,dd): #*********************************** # Zeller's congruence #*********************************** # int_day=1 to 7 => Mon to Sun cc=int(yy/100) pp=dd+int(26*(mm+1)/10)+int(yy%100)+int((yy%100)/4)+(5*cc+int(cc/4))+5 int_day=int(pp%7)+1 return int_day def LEAP_YEAR(yy): LEAP_YEAR=0 if yy%400==0 or (yy%4==0 and yy%100!=0): LEAP_YEAR=1 return LEAP_YEAR def CALC(yy,mm,dd,ddate): m_days=[31,28,31,30,31,30,31,31,30,31,30,31] cal=[[0]*7 for i in range(0,6)] yc=yy mc=mm if mm==1: yc=yy-1; mc=13 if mm==2: yc=yy-1; mc=14 int_day=WHATDAY(yc,mc,dd) ly=LEAP_YEAR(yy) if ly==1 and mm==2: m_days[1]=29 if ly==0 and (mc==14 and dd==29): print('Date inputted is invalid!') ir=-1 ic=-1 k=0 for i in range(1,m_days[mm-1]+1): int_day=WHATDAY(yc,mc,i) cal[k][int(int_day)-1]=i if ddate.year==yy and ddate.month==mm and ddate.day==i: ir=k; ic=int(int_day)-1 if int_day==7: k=k+1 nw=5 if cal[5][0]!=0: nw=6 return nw,cal,ir,ic def CH_L(): global yi,mi,yd,md,dm,t2,t3 dm=dm-1 md=int((mi+dm)%12) if md==0: md=12 dy=(mi+dm)//12 if int((mi+dm)%12)==0: dy=dy-1 yd=yi+dy t2.destroy() t3.destroy() DRAW_T2() DRAW_T3() def CH_R(): global yi,mi,yd,md,dm,t2,t3 dm=dm+1 md=int((mi+dm)%12) if md==0: md=12 dy=(mi+dm)//12 if int((mi+dm)%12)==0: dy=dy-1 yd=yi+dy t2.destroy() t3.destroy() DRAW_T2() DRAW_T3() def CH_C(): global yi,mi,yd,md,dm,t2 d=datetime.datetime.today() yi=d.year mi=d.month dm=0 yd=yi md=mi t2.destroy() t3.destroy() DRAW_T2() DRAW_T3() def DRAW_T2(): global yd,md,t2 ddate=datetime.datetime.today() t2=Frame(root,bg='#ffffff') t2.pack(side=TOP,fill=BOTH) hh=yd-2000+12 m_list=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] w_list=['M','T','W','T','F','S','S'] colbg1=['#ffffff','#ffffff','#ffffff','#ffffff','#ffffff','#0000ff','#ff0000'] colfg1=['#000000','#000000','#000000','#000000','#000000','#ffffff','#ffffff'] colbg2=['#ffffff','#ffffff','#ffffff','#ffffff','#ffffff','#ffffff','#ffffff'] colfg2=['#000000','#000000','#000000','#000000','#000000','#0000ff','#ff0000'] col1='#ffffdd' col2='#000088' str2=m_list[md-1]+' '+str(yd)+' (H'+str(hh)+')' Label(t2,text=str2,bg=col1,fg=col2,font='consolas 12 bold',relief=FLAT).grid(row=1,column=0,columnspan=7,sticky=W+E) for c in range(7): col1=colbg1[c] col2=colfg1[c] str3=w_list[c] Label(t2, text=str3, bg=col1, fg=col2,font='consolas 10 bold',relief=FLAT,bd=0).grid(row=2,column=c,padx=0,pady=0) nw,cal,ir,ic=CALC(yd,md,1,ddate) for r in range(nw): for c in range(7): col1=colbg2[c] col2=colfg2[c] if cal[r][c]==0: str4=' ' else: str4='{0:2d}'.format(cal[r][c]) if 0<=ir and 0<=ic: if r==ir and c==ic: col1='#808000'; col2='#ffffff' Label(t2, text=str4, bg=col1, fg=col2,font='consolas 12 bold',relief=FLAT,bd=0).grid(row=r+3,column=c,padx=0,pady=0) del m_list,w_list,colbg1,colbg2,colfg1,colfg2,cal def DRAW_T3(): global t3 t3=Frame(root,bg='#eeeeee') t3.pack(side=TOP,fill=BOTH) Label(t3,textvariable=strt,bg='#eeeeee',fg='#000000',font='consolas 14 bold').pack(side=BOTTOM,fill=BOTH) show_time() #Main routine d=datetime.datetime.today() yi=d.year mi=d.month dm=0 yd=yi md=mi root=Tk() t1=Frame(root,bg='#eeeeee') t1.pack(side=TOP,fill=BOTH) strt=StringVar() strt.set('') strd=StringVar() strd.set(strftime('%d %b %Y')) Button(t1,text = '<',bg='#eeeeee',fg='#000000',font='consolas 11 bold',command = CH_L).pack(side=LEFT) Button(t1,textvariable=strd,bg='#eeeeee',fg='#000000',font='consolas 11 bold',width=12,command=CH_C).pack(side=LEFT,fill=X) Button(t1,text = '>',bg='#eeeeee',fg='#000000',font='consolas 11 bold',command = CH_R).pack(side=RIGHT) DRAW_T2() DRAW_T3() root.mainloop( )