4188
Comentário:
|
4188
converted to 1.6 markup
|
Nenhuma diferença encontrada! |
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(-1)
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 new=''
70 for n in range(len_mask):
71 mask_char=self._mask[n]
72 if z<_len:
73 if self.chars.match(mask_char):
74 new=new+mask_char
75
76 else:
77 text_char=_text[z]
78 if self.validate(text_char, mask_char):
79 new=new+text_char
80 z=z+1
81 return new
82
83 def unmask(self, _text):
84 _text=self.chars.sub('',_text)
85 return _text
86
87 def set_mask(self, _mask):
88 self._mask=_mask
89 self.set_max_length(len(self._mask))
90
91
92
93
94 class EntryExample:
95
96 def entry_toggle_editable(self, checkbutton, entry):
97 entry.set_editable(checkbutton.get_active())
98
99 def entry_toggle_visibility(self, checkbutton, entry):
100 entry.set_visibility(checkbutton.get_active())
101
102 def __init__(self):
103
104 window = gtk.Window(gtk.WINDOW_TOPLEVEL)
105 window.set_size_request(200, 100)
106 window.set_title("Teste de EntryMask")
107 window.connect("delete_event", lambda w,e: gtk.main_quit())
108
109 vbox = gtk.VBox(False, 0)
110 window.add(vbox)
111 vbox.show()
112
113 entry = EntryMask()
114 entry.set_mask('99.999.999/9999-XX')
115 vbox.pack_start(entry, True, True, 0)
116 entry.show()
117
118 hbox = gtk.HBox(False, 0)
119 vbox.add(hbox)
120 hbox.show()
121
122 check = gtk.CheckButton("Editavel")
123 hbox.pack_start(check, True, True, 0)
124 check.connect("toggled", self.entry_toggle_editable, entry)
125 check.set_active(True)
126 check.show()
127
128 check = gtk.CheckButton("Visivel")
129 hbox.pack_start(check, True, True, 0)
130 check.connect("toggled", self.entry_toggle_visibility, entry)
131 check.set_active(True)
132 check.show()
133
134 button = gtk.Button(stock=gtk.STOCK_CLOSE)
135 button.connect("clicked", lambda w: gtk.main_quit())
136 vbox.pack_start(button, True, True, 0)
137 button.set_flags(gtk.CAN_DEFAULT)
138 button.grab_default()
139 button.show()
140 window.show()
141
142 def main():
143 gtk.main()
144 return 0
145
146 if __name__ == "__main__":
147 EntryExample()
148 main()