見出し画像

tkinterで和暦・西暦変換ツールを作成してみた

tkinterで簡単なUIを作ってみようという趣旨です。

なんでも良かったのですが、とりあえず和暦を西暦に、西暦を和暦に変換するツールを作ってみました。

1.完成形

画面

一番上部分で和暦→西暦変換か、西暦→和暦変換かを選択します。デフォルトは西暦→和暦変換となっています。

画像1

(1) 和暦→西暦変換

和暦→西暦をラジオボタンで選び、選択を押下します。

画像2

入力欄が切り替わります。

画像3

元号をコンボボックスで選択して2桁の和暦年数を入力し、変換ボタンを押下します。

画像4

西暦が表示されます。

(2) 西暦 → 和暦変換

ラジオボタンで西暦→和暦を選んで、選択を押下します。

画像5

西暦年数を入力し、変換を押すと和暦に変換され表示されます。

画像6

2. ラジオボタンの配置

上部はラベルフレームという、tkinterのウィジェットを使ってます。
そして、ラベルフレームを親として、ラジオボタンを2つ配置。和暦→西暦を選んだらwtos、西暦→和暦を選んだらstowという値がvalue_selectという変数に格納されるようにしています。



#選択用フレームを作成し設置する
#ラベルフレーム
label_frame = ttk.Labelframe(
   root,
   text = 'ツール選択',
   padding = (5, 15),
   style='My.TLabelframe'
   )
#選択した値
value_select = StringVar()
#ラジオボタン(1つ目)
rb1 = ttk.Radiobutton(
   label_frame,
   text='和暦→西暦',
   value = 'wtos',
   variable=value_select,
   padding = (15,5)
   )
#ラヂオボタン(2つ目)
rb2 = ttk.Radiobutton(
   label_frame,
   text='西暦→和暦',
   value = 'stow',
   variable=value_select,
   padding = (15,5)
   )
#ツール選択ボタン
select_button = ttk.Button(
   label_frame,
   text = "選択",
   padding = (15, 5),
   command=change_tool)

#選択ツール関連の配置
label_frame.grid(row = 0, column= 0)
rb1.grid(row=0, column=0)
rb2.grid(row=0, column=1)
select_button.grid(row= 0, column=2)

3. ツールの表示切替

表示切替は、ツール選択ボタンにcommandとして設定したchange_toolという関数で実施しています。

#和暦→西暦or西暦→和暦の切替
def change_tool():
   select = value_select.get()
   if select == "stow":
       wtosframe.grid_remove()
       stowframe.grid()
   else:
       stowframe.grid_remove()
       wtosframe.grid()

西暦→和暦変換用のフレームと、和暦→西暦変換用のフレームをそれぞれ用意し、各フレームを親として入力欄や結果表示欄を配置しておくことで、フレームをgrid_remove()で表示しないようにしたり、grid()で再表示したりすることで実現しています。

4. 西暦 → 和暦変換 機能

以下の関数にて入力値から計算・表示をしています。

#和暦変換機能
def exchange_to_wareki(*args):
   try:
       value_seireki = int(seireki2.get())

       if value_seireki >= 1868 and value_seireki <= 1911:
           result = "明治 " + str(value_seireki -1867) + "年"
           wareki.set(result)
       elif value_seireki >= 1912 and value_seireki <= 1925:
           result = "大正 " + str(value_seireki -1911) + "年"
           wareki.set(result)
       elif value_seireki >= 1926 and value_seireki <= 1988:
           result = "昭和 " + str(value_seireki -1925) + "年"
           wareki.set(result)
       elif value_seireki >= 1989 and value_seireki < 2019:
            result = "平成 " + str(value_seireki -1988) + "年"
            wareki.set(result)
       elif value_seireki >= 2019:
           result = "令和 " + str(value_seireki - 2018) + "年"
           wareki.set(result)
       else:
           result = "入力された値では変換できません"
           wareki.set(result)
   except ValueError:
       pass  

入力された西暦年数から、元号と年数を計算して設定しています。

5. 和暦 → 西暦変換 機能

以下関数で実施。元号と和暦年数から西暦を算出しています。

#西暦変換機能
def exchange(*args):
   try:
       value_gengou = gengou.get()
       value_year =int(year.get())
       if value_gengou == '明治' and value_year < 46:
           result = value_year + 1867
           seireki.set(str(result)+"年")
       elif value_gengou == '大正' and value_year < 16:
           result = value_year + 1911
           seireki.set(str(result)+"年")
       elif value_gengou == '昭和' and value_year < 65:
           result = value_year + 1925
           seireki.set(str(result)+"年")
       elif value_gengou == '平成' and value_year < 32:
           result = value_year + 1988
           seireki.set(str(result)+"年")
       elif value_gengou == '令和':
           result = value_year + 2018
           seireki.set(str(result)+"年")
       else:
           result = "入力された値では変換できません"
           seireki.set(result)
   except ValueError:
       pass

6. コード全文

主なポイントは開設済ですが、良かったら他のtkinterの記事も読んでみてください。
また、このコードを応用して是非自分でオリジナルの画面・機能を作ってみてくださいね!

ここから先は

8,158字

¥ 300

この記事が気に入ったらサポートをしてみませんか?