このセクションでは、数値入力を受け付けるシンプルなダイアログボックスを作ってみます。 すこし面白くするために、数値の検証をしてみましょう。入力されたものが数値ならOKボタンをenableにし、そうでないならdisableにします。
IDEで新しいウィンドウを開くことから始めます。そこにプログラムを入力し、IDEの"Run all"コマンドを使って実行します。
はじめに、いくつかのモジュールをインポートしなければなりません:Wkeys
、これには便利な定数が含まれています。そしてWASTEconst
、これでテキストフィールド内のテキストの配置を変えることができます。
import W import Wkeys import WASTEconst
また、数値と適合するような正規表現を準備する必要があります。ここにあげたものは完全ではありません ("-0"の入力が可能です。これは判断が難しい)が、これに適合するものは何でもPythonによって 数値であると認識され、入力できます。
import re num = re.compile("^-?([1-9][0-9]*|0)(.[0-9]+)?$")
次に、ウィジェットを準備しましょう。モードレスダイアログウィンドウを使います。これに、ユーザへの指示を促すスタティックテキストボックスを持たせます。
w = W.Dialog((200, 92), "Number Dialog") w.text = W.TextBox((4, 4, -4, 18), "Please enter a number:", fontsettings = ("charcoal",0,12,(0,0,0)))
これからが、ダイアログの心臓部です。正規表現を使って入力フィールドの内容を確認し、それが適合するかどうかでOKボタンをenableにしたりdisableにしたりするコールバック、do_key()
を設定します。次に入力フィールドそのものを作り、その中にコールバックをパラメータとして渡します。
def do_key(char, modifiers): if (char != Wkeys.returnkey and char != Wkeys.enterkey): content = w.display.get() w.OK.enable(num.match(content)) w.display = W.EditText((4,22,-4,22), "0", callback = do_key, fontsettings = ("geneva",0,12,(0,0,0)))
最後に、ボタンを作ります。OKボタンには、最終的な値を表示し、ウィンドウを閉じさせるコールバックdone()
を持たせます。"Cancel"ボタンは単純にウィンドウを閉じます。
def done(): print w.display.get() w.close() w.OK = W.Button((-70, 60, 58,20), "OK", done) w.cancel = W.Button((-140,60,58,20), "Cancel", w.close)
それから、OKボタンにもう少し付け加えます。OKボタンをこのウィンドウのデフォルトボタンにします。すると、ボタンの周りに強調のリングが付きます;さらにOKボタンのpush()
メソッドにenterキーとreturnキーをバインドします。
w.setdefaultbutton(w.OK) w.bind(Wkeys.returnkey, w.OK.push) w.bind(Wkeys.enterkey, w.OK.push)
最後に、ダイアログを開いて、最後のひとひねりでテキストフィールド内を右揃えに設定します (入力フィールドが開いたあと、このように直接WASTEエディタをひねるまで待たなければなりません)。
w.open() w.display.ted.WESetAlignment(WASTEconst.weFlushRight)
これでダイアログを表示でき、IDEウィンドウの一部として実行できます。 何回も実行すると、いくつも独立したウィンドウが作られます。 入力の手間が省けるよう、完成したソースコードを用意しました。
float()
、int()
、long()
をtry-exceptの
構文の中で使って検証するのがいい方法です。
プログラムを修正して、入力された数値がPythonにふさわしいかを検証するようにしましょう。