Python/Tkinter/Ligando eventos a callbacks

No Tkinter, a comunicação entre as ações executadas pelo usuário e as respostas dos Widgets é feita através de eventos e callbacks. O conceito está explicado no livro Programação em GUI, capitulo Eventos, sinais, slots e callbacks.

ExemploEditar

O código abaixo contém um botão e uma caixa de texto. O objetivo é fazer a "string" "OK" aparecer na caixa de texto quando o botão for clicado. O esboço do código é:

from Tkinter import *

root = Tk()

button1 = Button(root, text="OK")
button1.pack(anchor = W)
entry1 = Entry(root)
entry1.pack(side=TOP)

root.mainloop()

O código acima não faz nada: clica-se no botão, e nada acontece. É preciso acrescentar uma instrução que diz que o entry1 deve executar entry1.insert(0, "OK") quando o botão for clicado. Isto é feito em dois pontos:

Escreve-se o callback:

def botao_pressionado():
  entry1.insert(0, "OK")

Modifica-se a criação do botão de forma que o callback seja chamado quando ele for clicado:

button1 = Button(root, text="OK", command = botao_pressionado)

O código completo fica assim:

from Tkinter import *

root = Tk()

def botao_pressionado():
  entry1.insert(0, "OK")

button1 = Button(root, text="OK", command = botao_pressionado)
button1.pack(anchor = W)
entry1 = Entry(root)
entry1.pack(side=TOP)

root.mainloop()

Ligação externaEditar