tkinter で 年月日を入力して曜日を表示します。
実際に書いたコード
# 年月日を入力して曜日を表示する
import tkinter as tk
from datetime import datetime
def show_weekday():
year = year_entry.get()
month = month_entry.get()
day = day_entry.get()
# 入力が数字がどうかチェック
if not (year.isdigit() and month.isdigit() and day.isdigit()):
result_label.config(text="数字を入力してください")
return
try:
y = int(year)
m = int(month)
d = int(day)
dt = datetime(y, m, d)
except ValueError:
result_label.config(text="存在しない日付です")
return
week = ["月", "火", "水", "木", "金", "土", "日"]
result_label.config(text=f"{week[dt.weekday()]}曜日")
# --- GUI構築 ---
root = tk.Tk()
root.title("曜日判定アプリ")
root.geometry("600x200")
tk.Label(root, text="年").pack()
year_entry = tk.Entry(root)
year_entry.pack()
tk.Label(root, text="月").pack()
month_entry = tk.Entry(root)
month_entry.pack()
tk.Label(root, text="日").pack()
day_entry = tk.Entry(root)
day_entry.pack()
tk.Button(root, text="曜日を表示", command=show_weekday).pack()
result_label = tk.Label(root, text="")
result_label.pack()
root.mainloop()
解説
.isdigit()
.isdigit() は、Python の文字列メソッドで、 「その文字列が数字だけで構成されているかどうか」 を判定します。
"123".isdigit() # True
"12a".isdigit() # False
"".isdigit() # False(空文字は数字扱いになりません)
数字以外の文字が含まれている場合は False になります。
except ValueError:
except ValueError: は、 「ValueError という種類のエラーが発生したときに、このブロックを実行します」 という意味になります。
Python の例外処理は、
try:
処理
except 例外の種類:
エラー時の処理
という形で書きます。
曜日リストと weekday()
曜日リストについて
Python の weekday() は、曜日を 0〜6 の番号で返します。
- 月曜 → 0
- 火曜 → 1
- 水曜 → 2
- 木曜 → 3
- 金曜 → 4
- 土曜 → 5
- 日曜 → 6
この番号を日本語の曜日に変換するために、 次のようなリストを用意します。
week = ["月", "火", "水", "木", "金", "土", "日"]
このリストは、weekday() が返す番号と 同じ順番 で並んでいます。 そのため、week[番号] と書くだけで、 対応する日本語の曜日を取り出すことができます。
weekday() の結果を日本語に変換する
dt.weekday() は 0〜6 の整数を返します。 その番号を使って、曜日リストから日本語の曜日を取り出します。
week[dt.weekday()]
たとえば dt.weekday() が 2 なら、 week[2] は "水" になります。
ラベルに表示する
tkinter の Label は、config() を使うことで 表示する文字を後から変更できます。
result_label.config(text=f"{week[dt.weekday()]}曜日")
このコードは、
dt.weekday()で曜日番号を取得week[...]で日本語の曜日を取り出す- f文字列で「〇曜日」という文字列を作る(※補足1)
config()でラベルの文字を更新する
という流れになっています。
たとえば水曜日なら "水曜日" が表示されます。
(※補足1)f をつけないと、 { } の中身は“ただの文字”として扱われます。 つまり、変数の値は埋め込まれず、そのまま表示されてしまいます。
tk.Entry()
tk.Entry() は、tkinter が提供する 「1行の入力欄」 を作るためのウィジェットです。 ユーザーが文字や数字を入力するための箱のようなものです。
year_entry = tk.Entry(root)
このコードは、
root(ウィンドウ)の中に- 年を入力するための Entry(入力欄)を作り
- その Entry を
year_entryという変数に入れる
という意味になります。
月と日についても、まったく同じ仕組みで Entry を作っています。
実行結果
Auto Py to Exe で、Windowsのexeアプリ化して、実行。

感想

Python の datetime モジュールの weekday() は 月曜日が0 でした。MT4 の DayOfWeek は日曜日が0 とは違います。今後、MT4のデータを処理するときに間違えそうです。



HR