0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

python PySimpleGUIで全角半角 相互変換ツールをお手軽作成

Posted at

はじめに

とあるシステムが全角文字しか入力を受け付けないため、文字列を全角/半角に変換するツールをサクッと作りました。

スクリーンショット 2023-07-03 235155.png

「変換対象のテキスト」に文字列を入力し、「変換」ボタンを押すと、「全角への変換結果」「半角への変換結果」にそれぞれ変換結果が表示されます。変換結果はもちろんコピーできます。ついでに文字列の「削除」ボタンを付けたり、文字列のカウント機能も付けてます。

また、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化して配布などすると、業務効率化につながりそうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?