El control Entry (Entrada) permite escribir
texto y mostrarlo en una caja de texto con una única línea. El texto puede fijarse con
llamadas a métodos que permiten que nuevo texto reemplace, se inserte antes o se añada
después del contenido actual del control Entry .
La función para crear un control Entry es:
entry = gtk.Entry(max=0)
Si el argumento max se especifica se establece
un límite de longitud del texto dentro de la Entry. Si
max es 0 no hay límite.
La longitud máxima de una entrada puede cambiarse usando el método:
entry.set_max_length(max)
El siguiente método altera el texto que hay actualmente en el control
Entry .
entry.set_text(text)
El método set_text() fija el contenido del
control Entry a text, remplazando el
contenido actual. Obsérvese que la clase Entry implementa
la interfaz Editable (sí, gobject
soporta interfaces al estilo de Java) que contiene algunas funciones más para
manipular los contenidos. Por ejemplo, el método:
entry.insert_text(text,position=0)
inserta text en la posición indicada dentro de
la entry.
El contenido de la Entry puede recuperarse
usando una llamada al siguiente método. Esto es útil en las retrollamadas que
se describen más abajo.
text = entry.get_text()
Si no queremos que el contenido de la Entry
sea modificada por alguien escribiendo en ella, podemos cambiar su estado de
edición.
entry.set_editable(is_editable)
El método anterior permite intercambiar el estado de edición del
control Entry pasándole un valor TRUE
o FALSE en el argumento is_editable.
Si estamos usando el control Entry y no
queremos que el texto que se introduzca sea visible, por ejemplo cuando una
contraseña se escribe, podemos usar el siguiente método, que además acepta una
bandera booleana.
entry.set_visibility(visible)
Una región del texto se puede poner como seleccionada usando el
siguiente método. Esto se usaría sobre todo cuando se ponga algún valor
predeterminado en un Entry, haciendo fácil para el
usuario el borrado.
entry.select_region(start,end)
Si queremos recibir notificación cuando el usuario introduzca el
texto, podemos conectar a las señales "activate" o "changed". La primera se
produce cuando el usuario pulsa la tecla enter dentro del control
Entry. La segunda se produce cuando ocurre cualquier
cambio en el texto, por ejemplo, para cualquier inserción o borrado de un
caracter.
El programa de ejemplo
entry.py muestra el uso de un control
Entry . La figura Figura 9.10, “Ejemplo de Entrada” muestra
el resultado de ejecutar el programa:
El código fuente entry.py es:
1 #!/usr/bin/env python
2
3 # ejemplo entry.py
4
5 import pygtk
6 pygtk.require('2.0')
7 import gtk
8
9 class EntryExample:
10 def enter_callback(self, widget, entry):
11 entry_text = entry.get_text()
12 print "Entry contents: %s\n" % entry_text
13
14 def entry_toggle_editable(self, checkbutton, entry):
15 entry.set_editable(checkbutton.get_active())
16
17 def entry_toggle_visibility(self, checkbutton, entry):
18 entry.set_visibility(checkbutton.get_active())
19
20 def __init__(self):
21 # create a new window
22 window = gtk.Window(gtk.WINDOW_TOPLEVEL)
23 window.set_size_request(200, 100)
24 window.set_title("GTK Entry")
25 window.connect("delete_event", lambda w,e: gtk.main_quit())
26
27 vbox = gtk.VBox(gtk.FALSE, 0)
28 window.add(vbox)
29 vbox.show()
30
31 entry = gtk.Entry()
32 entry.set_max_length(50)
33 entry.connect("activate", self.enter_callback, entry)
34 entry.set_text("hello")
35 entry.insert_text(" world", len(entry.get_text()))
36 entry.select_region(0, len(entry.get_text()))
37 vbox.pack_start(entry, gtk.TRUE, gtk.TRUE, 0)
38 entry.show()
39
40 hbox = gtk.HBox(gtk.FALSE, 0)
41 vbox.add(hbox)
42 hbox.show()
43
44 check = gtk.CheckButton("Editable")
45 hbox.pack_start(check, gtk.TRUE, gtk.TRUE, 0)
46 check.connect("toggled", self.entry_toggle_editable, entry)
47 check.set_active(gtk.TRUE)
48 check.show()
49
50 check = gtk.CheckButton("Visible")
51 hbox.pack_start(check, gtk.TRUE, gtk.TRUE, 0)
52 check.connect("toggled", self.entry_toggle_visibility, entry)
53 check.set_active(gtk.TRUE)
54 check.show()
55
56 button = gtk.Button(stock=gtk.STOCK_CLOSE)
57 button.connect("clicked", lambda w: gtk.main_quit())
58 vbox.pack_start(button, gtk.TRUE, gtk.TRUE, 0)
59 button.set_flags(gtk.CAN_DEFAULT)
60 button.grab_default()
61 button.show()
62 window.show()
63
64 def main():
65 gtk.main()
66 return 0
67
68 if __name__ == "__main__":
69 EntryExample()
70 main()