PythonのTkinterでカレンダー(datepicker)を使用する
Tkinterのdatepickerとして、「tkcalendar」を触ってみました。
■どんなもの?
「tkcalendar」には2種類のウィジェットがあり、
カレンダーウィジェット(右側)と、
コンボボックスを押すと、カレンダーが開くDateEntryウィジェット(左側)があります。
コンボボックスを押すと下にカレンダーが開きます
よくあるdatepickerです
■実装してみる
使用しているPythonのversionは「3.7.7」です。
インストール
pip install tkcalendar
実装
import tkinter
from tkcalendar import Calendar, DateEntry
class TestTkcalender(tkinter.Frame):
def __init__(self,master):
super().__init__(master)
self.pack()
self.master.title("tkカレンダーテスト")
self.master.geometry("800x600")
self.data_entry_date = DateEntry()
self.data_entry_date.place(x=250, y=230)
self.calender_date = Calendar()
self.calender_date.place(x=500, y=230)
def main():
root = tkinter.Tk()
root = TestTkcalender(master=root)
root.mainloop()
if __name__ == "__main__":
main()
これがで上記のとおりに表示されました。
コンボボックスのスタイルが変更できるみたいです。
tkcalender公式ドキュメントのHowToを使ってみましょう。
import tkinter
from tkinter import ttk
from tkcalendar import Calendar, DateEntry
class TestTkcalender(tkinter.Frame):
def __init__(self,master):
super().__init__(master)
self.pack()
self.master.title("tkカレンダーテスト")
self.master.geometry("800x600")
# カレンダーのスタイル
style = ttk.Style()
style.theme_use('clam')
style.configure('my.DateEntry',
fieldbackground='light green',
background='dark green',
foreground='dark orange',
arrowcolor='white')
self.data_entry_date = DateEntry(style='my.DateEntry')
self.data_entry_date.place(x=250, y=230)
self.calender_date = Calendar()
self.calender_date.place(x=500, y=230)
def main():
root = tkinter.Tk()
root = TestTkcalender(master=root)
root.mainloop()
if __name__ == "__main__":
main()
コンボボックスの背景と文字色が変わっていますね。
選択した日付を取得してみましょう「get_date()」で取得できます
import tkinter
from tkinter import ttk
from tkcalendar import Calendar, DateEntry
class TestTkcalender(tkinter.Frame):
def __init__(self,master):
super().__init__(master)
self.pack()
self.master.title("tkカレンダーテスト")
self.master.geometry("800x600")
# カレンダーのスタイル
style = ttk.Style()
style.theme_use('clam')
style.configure('my.DateEntry',
fieldbackground='light green',
background='dark green',
foreground='dark orange',
arrowcolor='white')
self.data_entry_date = DateEntry(style='my.DateEntry')
self.data_entry_date.place(x=250, y=230)
self.calender_date = Calendar()
self.calender_date.place(x=500, y=230)
self.print_button = tkinter.Button(master, text="プリント", bg="coral", font=("Times New Roman", 20), command=self.click_print)
self.print_button.place(x=400, y=150, width=150, height=50)
def click_print(self):
print(self.data_entry_date.get_date())
print(self.calender_date.get_date())
def main():
root = tkinter.Tk()
root = TestTkcalender(master=root)
root.mainloop()
if __name__ == "__main__":
main()
2021-03-18
2021-03-31
プリントを押してみると、日付がログに取得されていることが確認できますね。
※※※2021/03/22追記※※※
すっかり見落としていたものがあります。
赤枠で囲んだ部分です。
これは週番号(1月の第1週目が1番)といわれるものです。
あまり用途がないので消しましょう。
公式ドキュメント内の「showweeknumbers」に表示(True)・非表示(False)の記載がありますので、使ってみましょう。
22から26行目を修正
self.data_entry_date = DateEntry(style='my.DateEntry', showweeknumbers=False)
self.data_entry_date.place(x=250, y=230)
self.calender_date = Calendar(showweeknumbers=False)
self.calender_date.place(x=500, y=230)
週番号が無事消えました。
他にも、DateEntryウィジェットのコンボボックスに表示されているの日付フォーマットを変えられたりもできるみたいですね。