見出し画像

Python+PySimpleGUIで作るGUIアプリ入門 Part23-入力制限の追加-

入力制限の追加

テキストエリアなどに入力制限をかけたい場合が出てきます。例えば、氏名のふりがななどを入力してもらう場合です。この場合は、ひらがなのみもしくはカタカタのみに入力制限をかけたくなります。PySimpleGUIのCook bookには数字のみ(郵便番号等)の例がありますが、ひらがなの場合がありませんでしたので、今回はひらがな入力制限を追加していきます。

図23-1に示すGUIを作成します。テキストエリアには、ひらがな以外が入力出来なくなっています。ふりがななどの入力を求めたい場合に活用出来ます。

図23-1

コードは以下の通りです。

import PySimpleGUI as sg
import re


layout = [
    [sg.Text('ひらがなで入力して下さい')],
    [sg.Input(key='-Kana-', enable_events=True)],
]

window = sg.Window('入力制限(ひらがなのみ)', layout)

while True:
    event, values = window.read()

    if event == '-Kana-' and values['-Kana-'] and not re.search(r'[ぁ-ん]', values['-Kana-'][-1]):
        window['-Kana-'].update(values['-Kana-'][:-1])

    if event is None:
        break
window.close()

今回は、正規表現とre.search関数を使ってひらがな以外が入力出来ないようにしています。正規表現を扱いますので、reモジュールをインポートします。

import PySimpleGUI as sg
import re

レイアウトは非常にシンプルです。テキストウィジェットとインプットウィジェットのみを設置しています。インプットウィジェットには、key = '-Kana-'を設定し、入力があった場合にイベントを発生させるため、 enable_events = Trueを指定します。

イベント処理ですが、少し複雑です。以下のif文では3つの条件が成立するかどうかを判定しています。

  • インプットkey = '-Kana-'にイベントが発生した場合

  • values['-Kana-']がある場合(文字が入力された場合)

  • re.search(r'[ぁ-ん]', values['-Kana-'][-1])Falseの場合

1番目、2番目は良いと思いますが3番目が少し解りにくいと思います。こちらはre.search()関数を用いてひらがなが入力されたかを調べています。ひらがなは、正規表現でr'[ぁ-ん]'と表す事ができます。調べたい入力文字列は、最新の入力文字列だけとなります。values['-Kana-'][-1]として指定できます。これをnotで否定していますのでre.search(r'[ぁ-ん]', values['-Kana-'][-1])は、ひらがな以外が入力された場合となります。

上記の3つの条件が成立した場合、window['-Kana-'].update(values['-Kana-'][:-1])として最新の入力文字を削除します。つまり入力させないようにします。

if event == '-Kana-' and values['-Kana-'] and not re.search(r'[ぁ-ん]', values['-Kana-'][-1]):
     window['-Kana-'].update(values['-Kana-'][:-1])


以上のようにして、ひらがなのみ入力することが出来るインプットを作成出来ます。正規表現の部分をre.search(r'[ァ-ン]', values['-Kana-'][-1])と変更するだけで、カタカナのみを受け付けるようにも出来ます。

さまざまな場面で使えると思いますので、実際の現場で役に立つのではないでしょうか?

記事が参考になりましたら、❤️を押していただけると励みになります😊

いいなと思ったら応援しよう!