tkinterで和暦・西暦変換ツールを作成してみた
tkinterで簡単なUIを作ってみようという趣旨です。
なんでも良かったのですが、とりあえず和暦を西暦に、西暦を和暦に変換するツールを作ってみました。
1.完成形
画面
一番上部分で和暦→西暦変換か、西暦→和暦変換かを選択します。デフォルトは西暦→和暦変換となっています。
(1) 和暦→西暦変換
和暦→西暦をラジオボタンで選び、選択を押下します。
入力欄が切り替わります。
元号をコンボボックスで選択して2桁の和暦年数を入力し、変換ボタンを押下します。
西暦が表示されます。
(2) 西暦 → 和暦変換
ラジオボタンで西暦→和暦を選んで、選択を押下します。
西暦年数を入力し、変換を押すと和暦に変換され表示されます。
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の記事も読んでみてください。
また、このコードを応用して是非自分でオリジナルの画面・機能を作ってみてくださいね!
ここから先は
¥ 300
この記事が気に入ったらサポートをしてみませんか?