はじめに
とあるシステムが全角文字しか入力を受け付けないため、文字列を全角/半角に変換するツールをサクッと作りました。
「変換対象のテキスト」に文字列を入力し、「変換」ボタンを押すと、「全角への変換結果」「半角への変換結果」にそれぞれ変換結果が表示されます。変換結果はもちろんコピーできます。ついでに文字列の「削除」ボタンを付けたり、文字列のカウント機能も付けてます。
また、Web上で処理することに抵抗ない方はこちら
環境
OS: windows11
python 3.7以上
仮想環境とインストール
いつものように仮想環境を用意します。
python -m venv venv
.\venv\Scripts\activate
python -m pip install --upgrade pip
コードを実行するには事前にモジュールのインストールが必要です。
pip install PySimpleGUI
pip install mojimoji
コードは以下になります。
sample.py
import PySimpleGUI as sg
import mojimoji
def main():
width = 100
height = 10
# ウィンドウのレイアウトを定義
layout = [[sg.Text("変換対象のテキスト")],
[sg.Multiline(key='-IN-', enable_events=True, default_text="", size=(width,height))],
[sg.Button('変換', key='Submit', button_color=('#000', '#999')),
sg.Button('消去', key='Clear', button_color=('#dc3545', '#fff'))],
[sg.Text("全角への変換結果")],
[sg.Multiline(size=(width,height), key='-OUTPUT_ZEN-', disabled=True)],
[sg.Text("半角への変換結果")],
[sg.Multiline(size=(width,height), key='-OUTPUT_HAN-', disabled=True)],
[sg.Text("文字数カウント: 0", size=(40,1), key='-COUNT-')]]
# ウィンドウを作成
window = sg.Window('全角半角 変換', layout)
# イベントループ
while True:
event, values = window.read()
# ウィンドウを閉じる場合ループを抜ける
if event == sg.WINDOW_CLOSED:
break
# ユーザーがテキストボックスに何かを入力するたびに、その文字数を'-COUNT-'キーのテキスト要素に表示
if event == '-IN-':
window['-COUNT-'].update(f"文字数カウント: {len(values['-IN-'])}")
# 'Submit'ボタンをクリックすると、入力文字列を全角/半角に変換
# '-OUTPUT_ZEN-', '-OUTPUT_HAN-'キーのテキスト要素に表示
if event == 'Submit':
window['-OUTPUT_ZEN-'].update(mojimoji.han_to_zen(values['-IN-']))
window['-OUTPUT_HAN-'].update(mojimoji.zen_to_han(values['-IN-']))
# 'Clear'ボタンをクリックすると、入力フィールドと出力フィールドを空にする
if event == 'Clear':
window['-IN-'].update('')
window['-OUTPUT_ZEN-'].update('')
window['-OUTPUT_HAN-'].update('')
window['-COUNT-'].update('')
window.close()
if __name__ == "__main__":
main()
おわりに
Tkinterなどの別モジュールに比べてPySimpleGUIはコード量が少なく、何が起きているか把握しやすく、余計な事に気を回すことが少ないので使いやすいですね。
ちょっとしたアプリを作ってexe化して配布などすると、業務効率化につながりそうです。