Python

Tkinterでカレンダーから日付を選択する処理を実装する

この記事は約6分で読めます。

 

今回はPythonのデスクトップアプリ作成ツールであるTkinterでカレンダーから日付を選択する処理を実装したいと思います。

 

ライブラリのインストール

 

今回はtkcalendarというライブラリを使用します。これはtkinterとはデフォルトでインストールされていないので、pipで追加でインストールする必要があります

 

$ pip install tkcalendar

 

tkcalendarにはGUIにそのままカレンダーを表示される「calender」とプルダウン的な感じでカレンダーを表示できる「DateEntry」の2つがよく使うかなと思います。それぞれの使い方は以下のような感じです

 

calender

 

 

# カレンダーオブジェクト定義
calender_date = Calendar()

 

GUI上で入力した日付は以下で取得できます。

 

# GUIで入力した日付を取得
date_data = calender_date.get_date()

 

ただこれで取得できる日付データはMM/DD/YYなので、以下のように加工したほうが使いやすいかなと思います。

 

date_data.split("/")
print('開始日' + '20' + date_data[2] + '/' + date_data[0] + '/' + date_data[1] + '\n')

 

一応、フォーマットの形式は引数で設定を変えられるみたいなのですが、なんか効きませんでした。

 

参考:https://pypi.org/project/tkcalendar/#calendar-widget

 

DateEntry

 

こちらはプルダウン的な感じで日付を選択することができます。

 

# オブジェクト定義
date_form = DateEntry()

# GUIで選択された日付を取得する
print(date_form.get_date())

 

サンプルコード

 

以下が上記のものを実際にTkinterに組み込んだサンプルコードです

日付を選択してボタンを押すと選択した日付を確認できます。

 

import tkinter
from tkinter import *
from tkinter import ttk
from tkinter import filedialog
from tkinter import messagebox
import os
from tkcalendar import Calendar, DateEntry
import pandas as pd
import datetime


# 出力処理
def click_exe_button():
    start = calender_date.get_date()
    end = calender_date2.get_date().split("/")
    log.insert(END, '開始日'+ str(start) + '\n')
    log.insert(END, '終了日'+'20'+end[2]+'-'+end[0]+'-'+end[1]+'\n')
    dt = datetime.datetime.now()  # UTC
    str_dt = dt.strftime('%Y/%m/%d %H:%M:%S')
    log.insert(END, '処理完了' + str_dt + '\n')


if __name__ == '__main__':
    # ウィンドウを作成
    root = tkinter.Tk()
    root.title("アプリテスト") # アプリの名前
    root.geometry("480x500") # アプリの画面サイズ

    # Frame2の作成
    frame2 = ttk.Frame(root, padding=10)
    frame2.grid()
    
    # 日付選択ボタン
    
    start = StringVar()
    start.set('開始日')
    start_label = ttk.Label(frame2, textvariable=start)
    start_label.grid(row=0, column=0)
    calender_date =DateEntry(frame2)
    calender_date.grid(row=1, column=0)
    
    end = StringVar()
    end.set('終了日')
    end_label = ttk.Label(frame2, textvariable=end)
    end_label.grid(row=0, column=2)
    calender_date2 = Calendar(frame2, date_patternstr="y-mm-dd")
    calender_date2.grid(row=1, column=2)
    
    # Frame3の作成
    frame3 = ttk.Frame(root, padding=10)
    frame3.grid()
    
    # 処理ボタンの作成
    export_button = ttk.Button(frame3, text='日付確認', command=click_exe_button, width=20)
    export_button.grid(row=0, column=1)
    
    # Frame4の作成
    frame4 = ttk.Frame(root, padding=10)
    frame4.grid()
    
    # ログ表示BOX
    log = Text(frame4,width=50, height=12,borderwidth=5,wrap='none') 
    log.grid(row=1, column=1) 
    
    # ウィンドウを動かす
    root.mainloop()

 

<アプリイメージ>

 

関連記事:【Python】Tkinterで現在時刻を表示する機能を実装する

関連記事:【Python/tkinter】GUIツールでファイル選択処理を実装する

関連記事:【Python】Tkinterで定期実行処理を実装する

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

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