10

数値のみを受け入れるテキスト コントロールが必要です。(45 や 366 などの整数値のみ)

これを行う最善の方法は何ですか?

4

7 に答える 7

9

英数字コードをチェックして、同様のことをしなければなりませんでした。EVT_CHARのヒントは正しいことでした:

class TestPanel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, -1)
        self.entry = wx.TextCtrl(self, -1)
        self.entry.Bind(wx.EVT_CHAR, self.handle_keypress)

    def handle_keypress(self, event):
        keycode = event.GetKeyCode()
        if keycode < 255:
            # valid ASCII
            if chr(keycode).isalnum():
                # Valid alphanumeric character
                event.Skip()
于 2009-10-19T18:13:24.557 に答える
5

IntCtrl、、Masked Edit ControlおよびNumCtrlはすべて、さまざまなレベルの制御でこれを実行するように設計されています。「その他のWindows/コントロール」の下にあるwxデモをチェックして、それらがどのように機能するかを確認してください。

(または、代わりに生のTextCtrlを使用してこれを直接行うことを本当に楽しみにしている場合は、EVT_CHARイベントをキャッチし、文字をテストし、許可された文字である場合はevt.Skip()を呼び出します。)

于 2009-09-02T21:38:56.197 に答える
1

新しい/既存のバリデーター ( IntValidatorなど)を試したり、実装したりできIntCtrlます。バリデーターは、フィールドを検証するために使用でき (ダイアログ/パネルで複数のものを検証しようとする場合に役立ちます)、フィールドへの入力を制限するために EVT_CHAR と共に使用することもできます。EVT_CHAR

于 2011-04-26T20:53:51.677 に答える
0

NumCtrl には奇妙な癖があります。これは、EVT_CHAR とキーコードに基づいて Number コントロールを作成しようとする私の試みです。

このコントロールでは、数字だけでなくすべての特殊なキーコード (ctrl コンボ、矢印キー、バックスペースなど) も許可されるため、コピーと貼り付け、元に戻す、やり直し、すべてを選択などは引き続き機能します。他の印刷可能な文字 ( string.printableを使用) と Unicode 文字 ( WXK_NONEを使用)のみをブロックします。

すべての特別なキーコードを確認して許可する別の方法は、この回答で見つけることができます。これはより良いアプローチですが、より多くのコードが必要です。

import string

MyNumCtrl = wx.TextCtrl()
MyNumCtrl.Bind(EVT_CHAR, onChar)

def onChar(self, event):
    keycode = event.GetKeyCode()
    obj = event.GetEventObject()
    val = obj.GetValue()
    # filter unicode characters
    if keycode == wx.WXK_NONE:
        pass 
    # allow digits
    elif chr(keycode) in string.digits:
        event.Skip()
    # allow special, non-printable keycodes
    elif chr(keycode) not in string.printable:
        event.Skip() # allow all other special keycode
    # allow '-' for negative numbers
    elif chr(keycode) == '-':
        if val[0] == '-':
            obj.SetValue(val[1:])
        else:
            obj.SetValue('-' + val)
    # allow '.' for float numbers
    elif chr(keycode) == '.' and '.' not in val:
        event.Skip()
    return
于 2018-06-12T02:26:31.070 に答える
-1

wxpython デモの「Validator.py」スクリプトを確認してください。それはまさにあなたが必要とするものです

于 2014-04-14T06:03:49.813 に答える