tkinterで月間カレンダーを表示しよう
今回はtkinterを使って、月間カレンダーを表示するプログラムを作りましょう。
このプログラムでは処理を単純にするために、当日日付を取得して当月のカレンダーのみ表示するようにしています。
また、日曜日を赤、土曜日を青にして、一桁の日にちはformat()を使って右寄せになるようにしています。
tkinterで月間カレンダーを表示するプログラム
tkinterで月間カレンダーを表示するプログラムは、以下の通りです。
Calendarオブジェクトを作成して、monthdayscalendar()メソッドで当月のカレンダーを週毎の配列として取得します。
取得したカレンダーをgrid()を使って、日にち単位で並べています。
日にちが見やすくなるように、行と列の間隔や余白のサイズを調整しています。
メモ
monthdayscalendar()メソッドの使い方は、こちらの記事を参照してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
### インポート import datetime import calendar import tkinter ### 定数 WEEK = ["日", "月", "火", "水", "木", "金", "土"] ### 関数 def func(): ### 現在年月取得 year = datetime.date.today().year month = datetime.date.today().month ### ラベルに年月を設定 label = tkinter.Label(master=frame1, text=str(year) + "年" + str(month) + "月", font=("游ゴシック",20)) ### 年月表示 label.pack() ### カレンダーオブジェクト作成 cl = calendar.Calendar(firstweekday=6) ### 該当年月のカレンダーを取得 cal = cl.monthdayscalendar(year, month) ### 曜日配列を取得 for i,x in enumerate(WEEK): ### 日曜日は赤、土曜日は青にする if i == 0: label_day = tkinter.Label(master=frame2, text=x, font=("游ゴシック",18), width=3, fg="red") elif i == 6: label_day = tkinter.Label(master=frame2, text=x, font=("游ゴシック",18), width=3, fg="blue") else: label_day = tkinter.Label(master=frame2, text=x, font=("游ゴシック",18), width=3) ### 曜日を表示 label_day.grid(row=0, column=i, pady=2) ### 行カウンター row_cnt = 1 ### カレンダー配列を取得 for week in cal: for i,day in enumerate(week): ### 0だったら空白を設定 if day == 0: day = " " ### 日曜日は赤、土曜日は青にする if i == 0: label_day = tkinter.Label(master=frame2, text="{:>2}".format(day), font=("游ゴシック",18), height=1, fg="red") elif i == 6: label_day = tkinter.Label(master=frame2, text="{:>2}".format(day), font=("游ゴシック",18), height=1, fg="blue") else: label_day = tkinter.Label(master=frame2, text="{:>2}".format(day), font=("游ゴシック",18), height=1) ### 日にちを表示 label_day.grid(row=row_cnt, column=i, padx=2, pady=2) ### カウントアップ row_cnt = row_cnt + 1 ### メイン画面作成 main = tkinter.Tk() ### 画面サイズ設定 main.geometry("380x380") ### フレーム設定 frame1 = tkinter.Frame(master=main) frame2 = tkinter.Frame(master=main) ### フレーム表示 frame1.pack(pady=20, side="top") frame2.pack() ### カレンダー表示 func() ### イベントループ main.mainloop() |
プログラムを実行すると、以下のようなカレンダーが表示されます。