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?
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?
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
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.