今回はPythonのデスクトップアプリ作成ツールであるTkinterでカレンダーから日付を選択する処理を実装したいと思います。
Contents [hide]
ライブラリのインストール
今回は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で定期実行処理を実装する
コメント