associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Revisão 2e 2005-07-17 19:22:19

Excluir mensagem

MaskEntry

   1 #!/usr/bin/env python
   2 
   3 # example maskentry.py
   4 
   5 import pygtk
   6 pygtk.require('2.0')
   7 import gtk
   8 import re
   9 from gtk import *
  10 import gtk.gdk
  11 import gobject
  12 
  13 
  14 
  15 
  16 class EntryMask(gtk.Entry):
  17     
  18     def __init__(self):        
  19         
  20         self.gtkentry=gtk.Entry.__init__(self)
  21         self.chars = re.compile(r'[\-\.\(\)/{_}|]')
  22         self.set_text('')
  23         hid = self.connect_after('insert-text', self.filter)
  24         self.set_data('handlerid', hid)
  25               
  26                 
  27     def set(self, text, *args):
  28         
  29         hid = self.get_data('handlerid')
  30         self.handler_block(hid)
  31         self.set_text(text)
  32         self.set_position(self.z)
  33         self.handler_unblock(hid)
  34             
  35         
  36     def filter(self, *args):
  37         _text=self.get_text()
  38         _text=self.unmask(_text)
  39         _new=self.mask(_text)
  40         gobject.timeout_add(1, self.set , _new)
  41         
  42     
  43     def validate(self, text_char, mask_char):
  44         
  45         num = re.compile(r'[0-9]')
  46         lettup = re.compile(r'[A-Z]')
  47         lettdw = re.compile(r'[a-z]')
  48                    
  49         if mask_char == '9':
  50             valid = num.match(text_char)
  51         elif mask_char == 'a':
  52             valid = lettdw.match(text_char)
  53         elif mask_char == 'A':
  54             valid = lettup.match(text_char)
  55         elif mask_char == 'X':
  56             valid =  (num.match(text_char) or
  57                      lettdw.match(text_char) or
  58                      lettup.match(text_char))
  59         
  60         return valid
  61     
  62     def mask(self, _text):
  63         
  64         len_mask=int(len(self._mask))
  65         self._mask=list(self._mask)
  66         _len=int(len(_text))
  67         _text=list(_text)
  68         z=0
  69         m=0
  70         new=''
  71         for n in range(len_mask):
  72             mask_char=self._mask[n]
  73             if z<_len:
  74                 if self.chars.match(mask_char):
  75                     new=new+mask_char
  76                     m=m+1
  77                 
  78                 else:
  79                     text_char=_text[z]
  80                     if self.validate(text_char, mask_char):
  81                         new=new+text_char
  82                         z=z+1
  83         self.z=z+m
  84         return new
  85         
  86     def unmask(self, _text):
  87         _text=self.chars.sub('',_text)
  88         return _text
  89         
  90     def set_mask(self, _mask):
  91         self._mask=_mask
  92         self.set_max_length(len(self._mask))
  93         
  94     
  95     
  96 
  97 class EntryExample:
  98     
  99     def entry_toggle_editable(self, checkbutton, entry):
 100         entry.set_editable(checkbutton.get_active())
 101 
 102     def entry_toggle_visibility(self, checkbutton, entry):
 103         entry.set_visibility(checkbutton.get_active())
 104 
 105     def __init__(self):
 106         
 107         window = gtk.Window(gtk.WINDOW_TOPLEVEL)
 108         window.set_size_request(200, 100)
 109         window.set_title("Teste de EntryMask")
 110         window.connect("delete_event", lambda w,e: gtk.main_quit())
 111 
 112         vbox = gtk.VBox(False, 0)
 113         window.add(vbox)
 114         vbox.show()
 115 
 116         entry = EntryMask()
 117         entry.set_mask('99.999.999/9999-XX')
 118         vbox.pack_start(entry, True, True, 0)
 119         entry.show()
 120 
 121         hbox = gtk.HBox(False, 0)
 122         vbox.add(hbox)
 123         hbox.show()
 124                                   
 125         check = gtk.CheckButton("Editavel")
 126         hbox.pack_start(check, True, True, 0)
 127         check.connect("toggled", self.entry_toggle_editable, entry)
 128         check.set_active(True)
 129         check.show()
 130     
 131         check = gtk.CheckButton("Visivel")
 132         hbox.pack_start(check, True, True, 0)
 133         check.connect("toggled", self.entry_toggle_visibility, entry)
 134         check.set_active(True)
 135         check.show()
 136                                    
 137         button = gtk.Button(stock=gtk.STOCK_CLOSE)
 138         button.connect("clicked", lambda w: gtk.main_quit())
 139         vbox.pack_start(button, True, True, 0)
 140         button.set_flags(gtk.CAN_DEFAULT)
 141         button.grab_default()
 142         button.show()
 143         window.show()
 144 
 145 def main():
 146     gtk.main()
 147     return 0
 148 
 149 if __name__ == "__main__":
 150     EntryExample()
 151     main()