मैं एक टेक्स्ट नियंत्रण रखना चाहता हूं जो केवल संख्या स्वीकार करता है। (45 या 366 जैसे पूर्णांक मान)क्या टेक्स्टकूट को केवल wxPython में संख्याओं को स्वीकार करने के लिए सीमित करना संभव है?
ऐसा करने का सबसे अच्छा तरीका क्या है?
मैं एक टेक्स्ट नियंत्रण रखना चाहता हूं जो केवल संख्या स्वीकार करता है। (45 या 366 जैसे पूर्णांक मान)क्या टेक्स्टकूट को केवल wxPython में संख्याओं को स्वीकार करने के लिए सीमित करना संभव है?
ऐसा करने का सबसे अच्छा तरीका क्या है?
IntCtrl
, Masked Edit Control
, और NumCtrl
सभी नियंत्रण के विभिन्न स्तरों के साथ ही ऐसा करने के लिए डिज़ाइन किए गए हैं। वे कैसे काम करते हैं यह देखने के लिए "अधिक विंडोज/नियंत्रण" के तहत डब्ल्यूएक्स डेमो चेकआउट करें।
(या, यदि आप वास्तव में कच्चे TextCtrl के साथ सीधे ऐसा करने की उम्मीद कर रहे हैं, तो मुझे लगता है कि आप EVT_CHAR ईवेंट को पकड़ना चाहते हैं, वर्णों का परीक्षण करना चाहते हैं, और evt.Skip() को कॉल करना चाहते हैं, अगर यह एक था अनुमत चरित्र।)
मुझे कुछ समान करना था, अल्फान्यूमेरिक कोड की जांच करना था।
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()
आप IntCtrl
, EVT_CHAR
, या नया/मौजूदा सत्यापनकर्ता (IntValidator की तरह) को लागू करने की कोशिश कर सकते हैं: EVT_CHAR पर टिप सही बात थी। सत्यापनकर्ताओं को किसी फ़ील्ड को सत्यापित करने के लिए उपयोग किया जा सकता है (एक संवाद/पैनल पर एकाधिक चीजों को सत्यापित करने का प्रयास करते समय उपयोगी) और इन्हें फ़ील्ड में इनपुट प्रतिबंधित करने के लिए EVT_CHAR के साथ भी उपयोग किया जा सकता है।
कृपया wxpython डेमो में "Validator.py" स्क्रिप्ट देखें। यह वही है जो आपको
अन्य उत्तरों के नोट के रूप में, EVT_CHAR
हैंडलर के साथ ऐसा करना संभव है। आप उन पात्रों के लिए event.Skip()
पर कॉल करना चाहते हैं जिन्हें आप छोड़ना चाहते हैं, और उन लोगों के लिए कॉल न करें जिन्हें आप अवरुद्ध करना चाहते हैं। एक नज़र यह है कि आप शायद टैब वर्णों के लिए event.Skip()
पर कॉल करना चाहते हैं; दबाने वाला टैब EVT_CHAR
ईवेंट ट्रिगर करता है, और यदि आप event.Skip()
पर कॉल नहीं करते हैं, तो आप प्रभावी रूप से TextCtrl
एस के बीच टैब ट्रैवर्सल अक्षम कर देंगे।
import wx
app = wx.App()
frame = wx.Frame(None, -1, 'simple.py')
panel = wx.Panel(frame)
text_ctrl_1 = wx.TextCtrl(panel, value='123')
text_ctrl_2 = wx.TextCtrl(panel, value='456', pos=(0, 30))
def block_non_numbers(event):
key_code = event.GetKeyCode()
# Allow ASCII numerics
if ord('0') <= key_code <= ord('9'):
event.Skip()
return
# Allow decimal points
if key_code == ord('.'):
event.Skip()
return
# Allow tabs, for tab navigation between TextCtrls
if key_code == ord('\t'):
event.Skip()
return
# Block everything else
return
text_ctrl_1.Bind(wx.EVT_CHAR, block_non_numbers)
text_ctrl_2.Bind(wx.EVT_CHAR, block_non_numbers)
frame.Show()
app.MainLoop()
:
यहाँ एक न्यूनतम दो TextCtrl
कि काम कर टैब ट्रेवर्सल साथ पूर्णांक या दशमलव संख्या स्वीकार करते हैं, दिखा अनुप्रयोग है