万年历python

发布时间 2023-05-30 20:50:21作者: 子过杨梅
import tkinter as tk
import tkinter.ttk as ttk
import datetime
 
import calendar
 
today_date=datetime.date.today()
today_date_year = int(today_date.year)
today_date_month = int(today_date.month)
today_date_week = today_date.isocalendar()
 
date_num_list = calendar.monthcalendar(today_date_year,today_date_month)
 
my_win=tk.Tk()
my_win.title("日历")
 
def calendar_date():
    win_calendar = tk.Toplevel(my_win)
    win_calendar.title("日历")
    win_calendar.geometry('300x250')
 
    calendar_Canvas = tk.Canvas(win_calendar,highlightthickness=0,width=300,height=250)
    calendar_Canvas.pack()
    year_list = tuple(range(today_date_year-10,today_date_year+1))
    month_list = tuple(range(1,13))
 
    def Button_year_jian():
        calendar_Canvas.delete(tk.ALL)
        year_txt1 = year_txt.get()
        year_txt2 = year_txt1-1
        year_txt.set(year_txt2)
        my_calendar()
 
    def Button_year_jia():
        calendar_Canvas.delete(tk.ALL)
        year_txt1 = year_txt.get()
        year_txt2 = year_txt1+1
        year_txt.set(year_txt2)
        my_calendar()
 
    def Button_month_jian():
        calendar_Canvas.delete(tk.ALL)
        month_txt1 = month_txt.get()
        month_txt2 = 12 if month_txt1==1 else month_txt1-1
        month_txt.set(month_txt2)
        my_calendar()
 
    def Button_month_jia():
        calendar_Canvas.delete(tk.ALL)
        month_txt1 = month_txt.get()
        month_txt2 = 1 if month_txt1==12 else month_txt1+1
        month_txt.set(month_txt2)
        my_calendar()
        
    def Button_date(event):
        year_txt1 = year_txt.get()
        month_txt1 = month_txt.get()
        Button_txt = int(event.widget['text'])
        
        new_date = datetime.date(year_txt1,month_txt1,Button_txt)
        date.set(new_date)
 
    def year_month_date(event):
        my_calendar()
 
        
 
    ttk.Button(calendar_Canvas,width=2,text="",command= Button_year_jian).place(x=5,y=5)
    year_txt = tk.IntVar()
    year_txt.set(today_date_year)
    year_date = ttk.Combobox(calendar_Canvas,width=6,values=year_list,textvariable=year_txt)
    year_date.place(x=30,y=7)
    year_date.bind("<Return>",year_month_date)
    ttk.Button(calendar_Canvas,width=2,text="",command= Button_year_jia).place(x=95,y=5)
 
    ttk.Button(calendar_Canvas,width=2,text="",command= Button_month_jian).place(x=185,y=5)
    month_txt = tk.IntVar()
    month_txt.set(today_date_month)
    month_date = ttk.Combobox(calendar_Canvas,width=6,values=month_list,textvariable=month_txt)
    month_date.place(x=210,y=7)
    month_date.bind("<Return>",year_month_date)
    ttk.Button(calendar_Canvas,width=2,text="",command= Button_month_jia).place(x=275,y=5)
 
 
 
    def my_calendar():
        calendar_Canvas.delete(all)
        
        date_num_list = calendar.monthcalendar(year_txt.get(),month_txt.get())
        date_num_y = 80
        
        calendar_Canvas.create_rectangle(15,40,285,60,fill="#d6d6db",width=0)
        week_list = ["","","","","","",""]
        week_x = 30
        for i in week_list:
            calendar_Canvas.create_text(week_x,50,text=i)
            week_x = week_x+40
            
        for i in date_num_list:
            date_num_x = 30
            for ii in i:
                if ii == 0:
                    pass
                else:
                    My_date_Button = ttk.Button(calendar_Canvas,text=ii,width=2)
                    calendar_Canvas.create_window(date_num_x,date_num_y,window=My_date_Button)
                    My_date_Button.bind("<Button-1>", Button_date)
                date_num_x = date_num_x+40
            date_num_y = date_num_y+30
 
    my_calendar()
 
 
date = tk.StringVar()
date.set(today_date)
ttk.Entry(my_win,textvariable=date).pack(side="left",padx=5,pady=5)
 
ttk.Button(my_win,text="",width=2,command=calendar_date).pack(side="left",padx=5,pady=5)
 
 
my_win.mainloop()