数値のみを受け入れる PyGTK を使用してテキスト フィールドを作成する方法を知っている人はいますか。Glade を使用して UI を構築しています。
乾杯、
設定を切り替えるだけでこのようなことを行う方法については知りません。信号を介してこれを処理する必要があると思います.1つの方法は、changed
信号に接続してから、数値ではないものを除外することです.
簡単なアプローチ(テストされていませんが、うまくいくはずです):
class NumberEntry(gtk.Entry):
def __init__(self):
gtk.Entry.__init__(self)
self.connect('changed', self.on_changed)
def on_changed(self, *args):
text = self.get_text().strip()
self.set_text(''.join([i for i in text if i in '0123456789']))
フォーマットされた数値が必要な場合は、正規表現などを使用して、エントリ内に留まる文字を決定することもできます。
編集
Python でエントリを作成したくない場合があるため、既存のエントリを「麻痺させる」簡単な方法を紹介します。
def numbify(widget):
def filter_numbers(entry, *args):
text = entry.get_text().strip()
entry.set_text(''.join([i for i in text if i in '0123456789']))
widget.connect('changed', filter_numbers)
# Use gtk.Builder rather than glade, you'll need to change the format of your .glade file in Glade accordingly
builder = gtk.Builder()
builder.add_from_file('yourprogram.glade')
entry = builder.get_object('yourentry')
numbify(entry)
ユーザー入力をサニタイズしたくない場合は、テキスト入力を完全に許可しないでください。時間と分を収集しようとしている場合は、ユーザーの選択を制限できるスピン ボタンやその他のウィジェットはどうでしょう。
スピンボタンの例をご覧ください: http://www.pygtk.org/pygtk2tutorial/examples/spinbutton.py