【Python】tkinter:カレンダーを作成し、入力した日付に移動する

■概要

起動時、対象月のカレンダーを表示させるアプリをTkinterにて作成する。

また、テキストボックスに任意の日付を入力し、「変更」ボタンを押下した時、対象月のカレンダーに遷移させる機能を実装する。

カレンダー
カレンダー
X
X
2023/12/09
2023/12/09
変更
変更
12月
12月
2023
2023
27
27
28
28
29
29
30
30
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
11
11
12
12
13
13
14
14
15
15
16
16
17
17
18
18
19
19
20
20
21
21
22
22
23
23
24
24
25
25
26
26
27
27
28
28
29
29
30
30
31
31
◀︎
◀︎
◀︎
◀︎
▶︎
▶︎
▶︎
▶︎
Text is not SVG – cannot display

▼前提条件・免責事項

本ツールの動作環境は、Windows10とする。
※Windows11やMacでは動作未確認(レイアウト崩れなど発生する可能性あり)

■フローチャート

本ツールのフローチャートを以下に示す。

カレンダー作成クラス
カレンダー作成クラス
日付変更処理
日付変更処理
コンストラクタ
コンストラクタ
開始
開始
終了
終了
開始
開始
終了
終了
ボタン
押下時
ボタン 押下時
メイン処理
メイン処理
開始
開始
メイン関数呼び出し
メイン関数呼び出し
終了
終了
開始
開始
tkinterの
インスタンス
tkinterの…
カレンダー作成クラスの
インスタンス
カレンダー作成クラスの インスタンス
画面表示
画面表示
終了
終了
親クラスの初期化
親クラスの初期化
ウィジェットの配置
ウィジェットの配置
タイトルの設定
タイトルの設定
画面サイズの設定
画面サイズの設定
日付入力フォームの
作成
日付入力フォームの 作成
日付変更ボタンの
作成
日付変更ボタンの 作成
カレンダーの作成
カレンダーの作成
入力した日付の取得
入力した日付の取得
入力した日付に対して
カレンダーの日付を移動
入力した日付に対して カレンダーの日付を移動
カレンダー作成処理
カレンダー作成処理
Text is not SVG – cannot display

■サンプルコード

本ツールのサンプルコードを以下に示す。

import tkinter as tk
from tkcalendar import Calendar, DateEntry

# 画面サイズの定数
FRAME_WIDTH = 250
FRAME_HEIGHT = 220


# カレンダー作成クラス
class TkCalendaerFrame(tk.Frame):
    # コンストラクタ
    def __init__(self, master):
        super().__init__(master)
        self.pack()
        self.master.title("カレンダー")
        self.master.geometry(f'{FRAME_WIDTH}x{FRAME_HEIGHT}')

        # 日付入力のフォーム作成
        self.data_entry_date = DateEntry(locale='ja_JP')
        self.data_entry_date.place(x=50, y=20)

        # 日付変更ボタンの作成
        self.btn_change_date = tk.Button(
            master,
            text='変更',
            command=self.change_date
        )
        self.btn_change_date.place(x=150, y=15)

        # カレンダーの作成
        self.calender_date = Calendar(
            self.master,
            showweeknumbers=False,
            locale='ja_JP'
        )
        self.calender_date.place(x=10, y=50)

    # 日付変更処理
    def change_date(self):
        # 入力した日付の取得
        target_date = self.data_entry_date.get_date()

        # 入力した日付に対して、カレンダーの日付を移動
        self.calender_date.selection_set(target_date)


# メイン関数
def main():
    # tkinterのインスタンス
    root = tk.Tk()
    # カレンダー作成クラスのインスタンス
    root = TkCalendaerFrame(master=root)
    # 画面表示
    root.mainloop()


# メイン処理
if __name__ == "__main__":
    # メイン関数呼び出し
    main()

■実行結果

・ツール実行時


・テキストボックスに「2012/6/3」を入力し、「変更」を押下

■参考

本ツール作成にあたり参考とさせていただいたサイトを以下に示す。

タイトルとURLをコピーしました