Phone Number validation field : Pmw Validation Field « GUI Pmw « Python






Phone Number validation field

Phone Number validation field
#Pmw copyright

#Copyright 1997-1999 Telstra Corporation Limited, Australia 
#Copyright 2000-2002 Really Good Software Pty Ltd, Australia

#Permission is hereby granted, free of charge, to any person obtaining a copy 
#of this software and associated documentation files (the "Software"), to deal 
#in the Software without restriction, including without limitation the rights 
#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
#copies of the Software, and to permit persons to whom the Software is furnished 
#to do so, subject to the following conditions:

#The above copyright notice and this permission notice shall be included in all 
#copies or substantial portions of the Software.

#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
#INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
#PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
#HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 
#OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 
#SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 




import string
from Tkinter import *
from tkMessageBox import *
import string

def validIP(value):
    valid = 0
    try:
        if len(value) >=7 and len(value) <= 15:
            fields = string.splitfields(value, '.')
            if len(fields) < 5:
                for field in fields:
                    iV = string.atoi(field)
                    if iV < 0 or iV > 255:
                        valid = 0
                        break
                    else:
                        valid = 1
    except:
        pass
    if not valid:
        showerror(title='Invalid IP Address',
                  message='Format: nnn.nnn.nnn.nnn\n-1 < nnn < 256')
    return (value, 0, valid)

def validCP(value):
    valid = 0
    try:
        fields = string.splitfields(value, '-')
        for field in fields:
            iV = string.atoi(field)
            if iV < 1 or iV > 100:
                valid = 0
                break
            else:
                valid = 1
    except:
        pass
    if not valid:
        showerror(title='Invalid Card-Port',
                  message='Format: nnn-nnn\n0 < nnn < 101'),
    return (value, 0, valid)

def validLName(value):
    valid = 0
    try:
        if len(value) >= 3:
            ucFTC = string.upper(value[:2])
            if ucFTC == 'CP':
                valid = 1
    except:
        pass
    if valid:
        retval = 'CP' + value[2:]
        replace = 1
    else:
        showerror(title='Invalid Logical Name',
                  message='Format: CP+<text>')
        retval = value
        replace = 0
    return (retval, replace, valid)


class EntryFormatting:
    def __init__(self, master):
        frame = Frame(master)
        Label(frame, text='   ').grid(row=0, column=0,sticky=W)
        Label(frame, text='   ').grid(row=0, column=3,sticky=W)

        self._ipaddr = self.createField(frame, width=16, row=0, col=2,
                             label='Phone Number:\n(nnn)-nnn-nnn',
                             format=self.fmtPhone, enter=self.activate)

        frame.pack(side=TOP, padx=15, pady=15)
        
    def createField(self, master, label='', text='', width=1,
                    format=None, enter=None, row=0, col=0):
        Label(master, text=label).grid(row=row, column=col-1,
                                       padx=15, sticky=W)
        id = Entry(master, text=text, width=width, takefocus=1)
        id.bind('<KeyRelease>', format)
        id.bind('<Return>',   enter)
        id.grid(row=row, column=col, pady=10, sticky=W)
        return id
    
    def activate(self, event):
        print '<Return>: value is', event.widget.get()

    def fmtPhone(self, event):
        current = event.widget.get()
        if len(current) == 1:
            if event.char in '0123456789':
                current = '1-(%s' % current
            else:
                event.widget.bell()
                current = ''
        elif len(current) == 6:
            current = '%s)-' % current
        elif len(current) == 11:
            current = '%s-' % current
        event.widget.delete(0, END)
        event.widget.insert(0, current)

    def fmtSSN(self, event):
        current = event.widget.get()
        if len(current) in [3, 6]:
            current = '%s-' % current
        event.widget.delete(0, END)
        event.widget.insert(0, current)

######################################################################

root = Tk()
root.option_add('*Font', 'Verdana 10 bold')
root.option_add('*Entry.Font', 'Courier 10')
root.title('Entry  Formatting')

top = EntryFormatting(root)
quit = Button(root, text='Quit', command=root.destroy)
quit.pack(side = 'bottom')
 
root.mainloop()


           
       








Related examples in the same category

1.SIN number validation fieldSIN number validation field
2.Pmw EntryField validation: format mdy, separatorPmw EntryField validation: format mdy, separator
3.Pmw EntryField: time validation Pmw EntryField: time validation
4.Pmw EntryField validation: real number min maxPmw EntryField validation: real number min max
5.Pmw.EntryField: Social security NumberPmw.EntryField: Social security Number
6.EntryValidation: IP addressEntryValidation: IP address
7.Entry validation: card portEntry validation: card port
8.Entry validation: Logical NameEntry validation: Logical Name