Informatica Grafica
C A P I T U L O16 Entry y listbox


El entry

El widget entry permite introducir datos mediante el teclado y suele ir acompañado de un widget label que indica al usuario cuál es el dato que debe introducir.

Existen dos formas por las que la aplicación podrá acceder a los datos que el usuario haya introducido en el entry. La primera consiste en asignar al entry una variable que tomará en cada momento el valor que existiera en el entry. Sería así:

entry .e1 -width 10 -textvariable dato
pack .e1 -side top

Esta forma es muy simple, pero en el caso de que el usuario abandone el cuadro de diálogo sin aceptar los cambios, la variable permanecería con el valor incorrecto, por lo que habría que escribir código para evitar esto.

La segunda manera es algo más complicada pero más recomendable, ya que evita el problema anteriormente citado:

entry .e1 -width 10
pack .e1 -side top
.
.
proc Aceptar { } {
set dato [.e1 get]
# aqui iria el resto del procedimientos.
}

En este caso no se ha asignado ninguna variable al entry; así que lo que teclee el usuario no es automáticamente almacenado como ocurría en el caso anterior. Sólo en el caso de abandonar la ventana o el cuadro de diálogo pulsando el botón de "Aceptar" (que llamaría al procedimiento Aceptar) haría que se capturase el dato existente en el entry y se almacenase en una variable. En caso de abandonar la ventana por otros medios, el dato del entry se perderá, tal y como debe ser.

Los atributos más habituales de los entry son los que a continuación se presentan:


Tabla 14-2. Atributos más habituales de los entry.

background

Color del fondo. Puede acortarse a bg.

borderwidth

Ancho del borde.

cursor

Cursor que se muestra cundo el ratón entra en la ventana.

font

Fuente del texto.

foreground

Color del texto. También fg.

highlightcolor

Color cuando tiene el foco.

highlightthickness

Color del rectángulo que indica que tiene el foco.

insertofftime

Tiempo, en milisegundos, que durante el parpadeo del cursor, este no es visible.

insertontime

Tiempo, en milisegundos, que durante el parpadeo del cursor, este es visible.

justify

Justificación del texto: left, right o center.

relief

Relieve: flat, sunken, raised, groove o ridge.

show

Si es false, se mostrarán asteriscos en lugar de los caracteres tecleados.

state

disabled(sólo lectura) o normal (editable).

textvariable

Variable donde se almacenará le valor introducido.

width

Ancho en caracteres.

xscrollcommand

Utilizado para conectarlo con una barra de scroll.

Existen una serie de operaciones que pueden ser efectuadas con los entry, como insertar texto, borrarlo y desplazarlo con una barra de scroll. Estas operaciones necesitan el nombre de cada carácter, definido por su índice. El índice comienza en 0 para el primer carácter, y termina en end. En la siguiente tabla pueden verse los formatos de índices posibles.

Tabla 14-3. Indices para entrys.

0

Indice del primer carácter.

end

Indice del último carácter.

number

Indice de un carácter, contando desde cero.

insert

El carácter a la derecha del cursor.

xcoord

El carácter bajo la coordenada x especificada.

La siguiente tabla, donde $w representa un entry, presenta alguna de las operaciones posibles con entrys.

Tabla 14-4. Algunas operaciones con entrys.

$w cget opcion

Devuelve el valor de configuración de opcion.

$w configure ...

Modifica la configuración del entry.

$w delete inicio? fin?

Borra los caracteres desde inicio ahasta fin.

$w get

Captura el valor existente en el entry.

$w index indice

Devuelve el índice numérico de indice.

$w insert indice cadena

Inserta una cadena en el entry.

$w xview indice

Mueve el entry hasta el carácter en indice.

$w xview moveto fraccion

Mueve el texto del entry el valor dado en fraccion.

Ejemplo 14-2.
set w $v.fechinte
catch {destroy $w}
toplevel $w
# Se sitŁa correctamente en la pantalla la ventana
wm geometry $w +200+200
# Se coloca el tĄtulo en la ventana. wm title $w " Fecha e Interva
focus
# Crea el marco para situar los marcos de los widgets.
frame $w.ventana -borderwidth 2 -relief groove
pack $w.ventana -side top -fill both -padx 2m -pady 1m
# Crea el marco para un label.
frame $w.ventana.m1
label $w.ventana.m1.l -text "Fecha" -relief flat
pack $w.ventana.m1 -side top -fill both -padx 2m -pady 0
pack $w.ventana.m1.l -side left -padx 1m
# Crea el marco para los entrys de fecha y hora.
frame $w.ventana.m2 -borderwidth 2
label $w.ventana.m2.l1 -text "Fecha (dd-mm-aa):"
set e1 [entry $w.ventana.m2.e1 -relief sunken -width 10]
label $w.ventana.m2.l2 -text " Hora (hh:mm):"
set e2 [entry $w.ventana.m2.e2 -relief sunken -width 6]
pack $w.ventana.m2 -side top -fill both -padx 2m -pady 1m -expand true
pack $w.ventana.m2.l1 -side left -padx 1m
pack $w.ventana.m2.e1 -side left
pack $w.ventana.m2.l2 -side left
pack $w.ventana.m2.e2 -side left
focus $e1
# Crea el marco para el entry de intervalo de datos.
frame $w.ventana.m3
label $w.ventana.m3.l -text "Intervalo entre datos " \
-relief flat
set e3 [entry $w.ventana.m3.e -relief sunken -width 15]
pack $w.ventana.m3 -side top -fill both -padx 2m -pady 1m
pack $w.ventana.m3.l $w.ventana.m3.e -side left -padx 1m
# Crea el marco donde colocar los botones inferiores.
frame $w.buttons -relief groove -borderwidth 2
# Inserta el marco en la parte inferior de la ventana.
pack $w.buttons -side top -fill x -pady 1m -padx 2m
# Crea los botones de aceptar/cancelar.
button $w.buttons.aceptar -text Aceptar \
-relief raised \
-command "AceptarFechInte $w"
button $w.buttons.cancelar -text Cancelar \
-relief raised \
-command ""
button $w.buttons.ayuda -text Ayuda \
-relief raised \
-command ""
# Inserta los botones de aceptar/cancelar.
pack $w.buttons.aceptar -side left
pack $w.buttons.cancelar -side left
pack $w.buttons.ayuda -side left
# Crea el marco donde colocar la barra de mensajes inferior.
frame $w.barra -relief groove -borderwidth 2
pack $w.barra -side bottom -fill x -pady 1m -padx 2m
label $w.barra.label -textvar mensaje -relief sunken
pack $w.barra.label -side top -expand true -fill x
# Crea los bind para la barra de mensajes.
bind $w.ventana.m2.l1 <Motion> {set mensaje "Fecha de extraccion de los datos" }
bind $w.ventana.m2.e1 <Motion> {set mensaje "Fecha de extraccion de los datos" }
bind $w.ventana.m2.l2 <Motion> { set mensaje "Hora de extraccion de los datos" }
bind $w.ventana.m2.e2 <Motion> { set mensaje "Hora de extraccion de los datos" }
bind $w.ventana.m3.l <Motion> { set mensaje "Intervalo entre datos" }
bind $w.ventana.m3.e <Motion> { set mensaje "Intervalo entre datos" }
bind $w.buttons.aceptar <Motion> { set mensaje "Acepta los cambios efectuados \
y cierra la ventana" }
bind $w.buttons.cancelar <Motion> { set mensaje "Cierra la ventana sin aceptar \
los cambios efectuados" }
bind $w.buttons.ayuda <Motion> { set mensaje "Hace aparecer la ventana de \
ayuda para esta ventana" }
bind $w.ventana.m2.l1 <Leave> { set mensaje "" }
bind $w.ventana.m2.e1 <Leave> { set mensaje "" }
bind $w.ventana.m2.l2 <Leave> { set mensaje "" }
bind $w.ventana.m2.e2 <Leave> { set mensaje "" }
bind $w.ventana.m3.l <Leave> { set mensaje "" }
bind $w.ventana.m3.e <Leave> { set mensaje "" }
bind $w.buttons.aceptar <Leave> { set mensaje "" }
bind $w.buttons.cancelar <Leave> { set mensaje "" }
bind $w.buttons.ayuda <Leave> { set mensaje "" }
# Crea los bind del teclado:
# Se sale sin salvar los cambios con "Escape"
bind $w <Return> "AceptarFechInte $w"
bind $w <Escape> "CancelarFechInte $w"
# Inicializa las variables.
$w.ventana.m2.e1 delete 0 end
$w.ventana.m2.e2 delete 0 end
$w.ventana.m3.e delete 0 end
$w.ventana.m2.e1 insert 0 $fechinter(fecha)
$w.ventana.m2.e2 insert 0 $fechinter(hora)
$w.ventana.m3.e insert 0 $fechinter(intervalo)
}

Hasta aquí se ha creado la ventana de diálogo. Es importante ver cómo se realiza la inicialización de los entrys a un cierto valor

al ser llamada la ventana, y cómo se ha creado un label inferior que responde a los eventos del ratón <Motion> y <Leave>

para escribir en este label una pequeña ayuda. A continuación se escribe parte del procedimiento que es llamado al pulsar sobre

el botón de Aceptar y que captura los datos de los entrys.


proc AceptarFechInte { v } {
global fechinter
# Captura la fecha.
set fechinter(fecha) [$v.ventana.m2.e1 get]
# Captura la hora.
set fechinter(hora) [$v.ventana.m2.e2 get]
# Captura el tamanio del intervalo.
set Temp [$v.ventana.m3.e get]
.
.
.
# Destruye la toplevel que se le ha pasado como parametro y todos los
# widgets asociados a este.
destroy $v
}

El resultado es el siguiente:


Previous Page Next Page


© 1995-98, etsimo WWW team
Última modificación: 19 de Agosto de 1998 - 17:48:26