
Los programas en tk nos permiten ligar acciones a ciertos eventos en el sistema, por ejemplo, si se presiona alguno de los botones del ratón en una cierta posición de la ventana es posible mandar llamar a algún procedimiento o ejecutar algún comando.
Para ligar algún evento del mouse a cierta ventana se utiliza el comando:
bind .ventana <evento> {accion}
Donde ".ventana" es el nombre del elemento al cual se ligará la "accion" que es el comando que se ejecutará al momento de que suceda el "evento"
Ejemplo:
En este ejemplo se liga el botón 1 del ratón a la ventana principal del tk, los eventos que le ligan son: "Button-1" que es cuando se presiona dicho botón, "ButtonRelease-1" cuando se libera, y "Double-Button-1" para cuando se hace un doble click con el botón 1:
Aquí se ilustra el programa de esa forma:
#!/usr/local/bin/wish4.0
bind . <Button-1> {puts "Se presiono el boton 1"}
bind . <ButtonRelease-1> {puts "se libero el boton 1"}
bind . <Double-Button-1> {puts "se hizo doble click en el boton 1"}
En el siguiente ejemplo se utilizarán algunos otros ejemplos con el ratón, el evento "Any-Motion" detecta cualquier movimiento del ratón:
#!/usr/local/bin/wish4.0
bind . <Button-1> {puts "Se presiono en boton 1"}
bind . <Button-2> {puts "Se presiono en boton 2"}
bind . <Button-3> {puts "Se presiono en boton 3"}
bind . <ButtonRelease-1> {puts "Se libero el boton 1"}
bind . <Double-Button-1> {puts "Se hizo un doble click en el boton 1"}
bind . <Any-Motion> {puts "El cursor se encuentra en las coordenadas: %x,%y"}
A continuación se creará un pequeño programa que liga la liberación del botón 1 del mouse a un procedimiento que muestra el índice de la selección actual, es decir, la posición en la lista del elemento.
#!/usr/local/bin/wish4.0
listbox .lista1
pack .lista1
.lista1 insert 0 cero uno dos tres cuatro cinco seis
bind .lista1 <ButtonRelease-1> {muestraindice}
proc muestraindice {} {
puts [.lista1 curselection]
}
Se debe ligar este ejemplo al evento "ButtonRelease-1" ya que si se liga al "Button-1" se obtendrá un resultado incorrecto debido a que se evalua primero el evento y despues se genera la selección, por lo que parecerá que el resultado que aparece en pantalla está retrasado en 1 evento con respecto al click del ratón.
#!/usr/local/bin/wish4.0
listbox .lista1
pack .lista1
.lista1 insert 0 cero uno dos tres cuatro cinco seis
bind .lista1 <Button-1> {muestraindice}
proc muestraindice {} {
puts [.lista1 curselection]
}