import datetime from tkinter import * from time import * def show_time(): buff.set(strftime('%H:%M:%S (%a %d %b %Y)')) 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,yd,dy,t2 dy=dy-1 yd=yi+dy t2.destroy() DRAWCAL() def CH_R(): global yi,yd,dy,t2 dy=dy+1 yd=yi+dy t2.destroy() DRAWCAL() def CH_C(): global yi,yd,dy,t2 dy=0 yd=yi t2.destroy() DRAWCAL() def DRAWCAL(): global yd,t2 ddate=datetime.datetime.today() t2=Frame(root,bg='#ffffff') t2.pack(side=TOP,fill=BOTH) hh=yd-2000+12 col1='#ffffdd' col2='#000088' str1=str(yd)+' (H'+str(hh)+')' Label(t2,text=str1,bg=col1,fg=col2,font='consolas 11 bold',relief=FLAT).grid(row=0,column=0,columnspan=3,sticky=W+E) m_list=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'] w_list=['M','T','W','T','F','S','S'] col1='#ffffff' col2='#000000' 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'] nw=6 k=0 for i in range(0,4): for j in range(0,3): k=k+1 col1='#ffffff' col2='#000000' _mm=Frame(t2,bg=col1,relief=RAISED) str2=m_list[k-1] Label(_mm,text=str2,bg=col1,fg=col2,font='consolas 11 bold',relief=FLAT,bd=0).grid(row=0,column=0,columnspan=7) for c,wd in enumerate(w_list): col1=colbg1[c] col2=colfg1[c] str3=wd Label(_mm, text=str3, bg=col1, fg=col2,font='consolas 10 bold',relief=FLAT,bd=0).grid(row=1,column=c,padx=0,pady=0) dum,cal,ir,ic=CALC(yd,k,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(_mm, text=str4, bg=col1, fg=col2,font='consolas 10 bold',relief=FLAT,bd=0).grid(row=r+2,column=c,padx=0,pady=0) _mm.grid(row=i+1,column=j,padx=3,pady=0) del m_list,w_list,colbg1,colbg2,colfg1,colfg2,cal #Main routine d=datetime.datetime.today() yi=d.year dy=0 yd=yi root=Tk() t1=Frame(root) t1.pack(side=TOP,fill=BOTH) buff = StringVar() buff.set('') Button(t1,text='<',font='consolas 14 bold',command=CH_L).pack(side=LEFT) Button(t1,textvariable=buff,font='consolas 14 bold',width=30,command=CH_C).pack(side=LEFT,fill=X) Button(t1,text='>',font='consolas 14 bold',command=CH_R).pack(side=RIGHT) show_time() DRAWCAL() root.mainloop( )