今回は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で定期実行処理を実装する
コメント