ボタンを使って表示するカレンダーの年を切り替える
今回は前回作ったプログラムを改造して、ボタンによって前年のカレンダーと翌年のカレンダーを表示するようにしてみましょう。
また、プログラムを起動した段階で、その年のカレンダーを表示するようにします。
ボタンを使って表示するカレンダーの年を切り替えるプログラム
ボタンによって表示するカレンダーの年を切り替えるために、ボタンウィジェットのcommandオプションに引数を指定します。(55~57行目)
commandオプションで関数に引数を使うには、lambda式を使います。
lambda式に関しては、こちらの記事も参照してください。
また、ボタンで表示するカレンダーの年を切り替えるにあたって、16行目で入力フィールドに表示する年も設定し直すようにしています。
最後にデフォルトでその年のカレンダーを表示するために、72行目でカレンダー表示関数(func)を呼び出しています。
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 |
### インポート import datetime import calendar import tkinter ### 関数 def func(arg): ### 週の始まりを日曜日に設定 calendar.setfirstweekday(6) ### 表示する年を指定 year = value.get() + arg ### 入力フィールドに年を設定 value.set(year) ### 該当年のカレンダーを取得 cal = calendar.calendar(year) ### ウィジェット初期化 for widget in frame2.winfo_children(): widget.destroy() ### メッセージにカレンダーを設定 message = tkinter.Message(master=frame2, text=cal, font=("MS ゴシック",10)) ### カレンダー表示 message.pack() ### メイン画面作成 main = tkinter.Tk() ### 画面サイズ設定 main.geometry("600x600") ### Tkinter変数 value = tkinter.IntVar() ### 年初期値設定 value.set(datetime.date.today().year) ### フレーム設定 frame1 = tkinter.Frame(master=main) frame2 = tkinter.Frame(master=main) ### フレーム表示 frame1.pack(pady=20, side="top") frame2.pack(pady=20) ### 入力フィールド作成 entry = tkinter.Entry(master=frame1, textvariable=value, font=(None,16), width=4) ### ボタン作成 button1 = tkinter.Button(master=frame1, text="<", font=(None,12), command=lambda:func(-1)) button2 = tkinter.Button(master=frame1, text=">", font=(None,12), command=lambda:func(1)) button3 = tkinter.Button(master=frame1, text="指定年表示", font=(None,12), command=lambda:func(0)) ### <ボタン表示 button1.pack(side="left") ### 入力フィールド表示 entry.pack(side="left") ### >ボタン表示 button2.pack(side="left") ### 指定年ボタン表示 button3.pack(side="left") ### カレンダー表示 func(0) ### イベントループ main.mainloop() |
「<」ボタンを押下することで前年を、「>」ボタンを押下することで翌年のカレンダーを表示します。
また、入力フィールドに西暦を入れて、「指定年表示」ボタンを押下すると、その年のカレンダーを表示します。