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:

#!/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.

Aquí se ilustra el programa de esa forma:

#!/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]
   }