本記事(記事カラム)には広告が含まれています。
人気ブログランキング

年月日を入力して曜日を表示|Python 練習 18

記事内に広告が含まれています。

tkinter で 年月日を入力して曜日を表示します。

DMM FX広告(差し込みタイプ)
広告(PR)|自分の投資スタイルを見つける。※タップで開閉
広告(PR)

DMM FXは、「最初の一歩を踏み出す場」として選ばれることがある

口座を開いてみた。取引してみた。思ったよりも難しかった。──そんな経験が、投資との距離感を知るきっかけになることもあります。


サービスを通じて、自分の投資スタイルを見つける。それは、確信ではなくても構いません。「試してみた」という実感が、次の選択の材料になることもあるからです。


DMM FXに関する詳細は、以下の広告(PR)リンクをご覧いただけます。


👇こちらは広告(PR)リンクバナーです

DMMFX

実際に書いたコード

【試してみる際のお願い】

  • プログラミングは、お使いのパソコンの環境(OSやアプリのバージョン)によって、同じコードでもエラーが出るケースがよくあります。
  • 外部での実行や利用を想定して作られていないため、万が一、動作を試されたことにより不具合等の損害が生じても、当方は一切の責任を負いかねます。
  • 自分用のメモにつき、質問やバグ修正などの個別サポートは一切行っておりません。試す場合は完全な自己責任でお願いいたします。
# 年月日を入力して曜日を表示する
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()]}曜日")

このコードは、

  1. dt.weekday() で曜日番号を取得
  2. week[...] で日本語の曜日を取り出す
  3. f文字列で「〇曜日」という文字列を作る(※補足1)
  4. 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


人気ブログランキング