11 Stimmen

Ist es möglich, TextCtrl zu beschränken, nur Zahlen in wxPython zu akzeptieren?

Ich möchte ein Textsteuerelement haben, das nur Zahlen akzeptiert. (Nur ganzzahlige Werte wie 45 oder 366)

Wie lässt sich dies am besten bewerkstelligen?

0voto

auzn Punkte 193

NumCtrl hat für mich einige seltsame Eigenheiten. Hier ist mein Versuch, eine Zahl Steuerung basierend auf EVT_CHAR und Keycode zu erstellen.

Dieses Steuerelement erlaubt sowohl Zahlen als auch alle Sondertasten (Strg-Kombination, Pfeiltaste, Rücktaste usw.), so dass Kopieren/Einfügen, Rückgängig machen, Alles auswählen usw. weiterhin funktionieren. Es wird nur andere druckbare Zeichen blockieren (mit string.printable ) und Unicode-Zeichen (mit WXK_NONE )

Eine andere Möglichkeit, alle speziellen Schlüsselcodes zu prüfen und zuzulassen, finden Sie unter diese Antwort . Dies ist ein besserer Ansatz, erfordert aber mehr Code.

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

-1voto

alwbtc Punkte 25685

Bitte prüfen Sie das Skript "Validator.py" in der wxpython-Demo. Es ist genau das, was Sie brauchen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X