ryotankの備考録日記

趣味の電子工作についての備考録などなど

GUIで入力制限をしてみたい件その2

前回の続きbeta-boostcircit.hatenablog.com

から
validatecommandオプションでは、コールバック関数とパラメーターを指定します。

validatecommand=(コールバック関数, パラメーター)

指定したパラメーターによって、コールバック関数に渡す値(テキスト)が異なるみたい。
どの値を渡したいかによって、パラメーターを変える。


パラメータ

説明

%P

テキストボックスの入力されている文字(文字の挿入後)

%s

文字が入力される前の入力文字

%S

挿入または削除される文字

%W

ウィジェット

%d

数値を返す:1(挿入)、0(削除)、-1(その他)

%i

挿入または削除される文字のインデックス値

%v

設定されている検証タイプ

%V

コールバックの検証タイプ
という感じ。コールバックの検証タイプってなんやねんw

使っていくうちに意味が分かればいいかな~
validatecommmandオプションで指定するコールバック関数は、
サンプルだとregister()メソッドを使って定義をする

vc = root.regiser(limit_char)

参考にしたサンプルコードだと
テキストボックスにテキストが入力されるたびに
(validate="key")、入力値(%P)がlimit_char関数に渡されて実行されていた。

limit_char関数内では、文字数が5文字以上になるとFalseとなるようなコードは以下の通り。

return len(string) <= 5

つまりテキストボックスに6文字目が入力できないということになる。

vc = root.root.regiser(limit_char)
entry = tk.Entry(frame, validate="key", validatecommand = (vc, "%P")

という風にまとめると
これでテキストボックスに入力制限をかけられるようになる

あとは関数を作り、5文字までなど入力制限する文字数を決めるだけで良い。

 def limit_char(string):
     return len(string) <= 5   #6文字目を入力出来なくする


これをPySimpleGUIでも出来ればいいなぁと思案中・・・

とりあえずコードの骨組みを立てないと

次回の栄養素記録補助GUIその2くらいに
入力制限の記事描ければいいな|д゚)