Vinculação de eventos Tkinter

Resumo : neste tutorial, você aprenderá sobre o mecanismo de vinculação de eventos Tkinter.

Introdução à ligação de eventos Tkinter

Atribuir uma função a um evento de um widget é conhecido como ligação de evento . A função atribuída é invocada automaticamente quando o evento ocorre.

No tutorial anterior , você aprendeu como vincular uma função a um evento de um widget por meio da commandopção. No entanto, é importante observar que nem todos os widgets Tkinter suportam a commandopção.

Portanto, o Tkinter fornece uma forma alternativa de vinculação de eventos por meio do bind()método.

O seguinte mostra a sintaxe geral do bind()método:

widget.bind(event, handler, add=None)

Quando eventocorre um no widget, o Tkinter invocará automaticamente o handlercom os detalhes do evento.

Se quiser registrar um manipulador adicional, você pode passar o '+'para o addargumento. Isso permite que vários manipuladores de eventos respondam ao mesmo evento.

Exemplos de ligação de eventos Tkinter

O programa a seguir ilustra como vincular a return_pressedfunção ao Returnevento de tecla pressionada do 'Save'botão:

import tkinter as tk
from tkinter import ttk


def return_pressed(event):
    print('Return key pressed.')


root = tk.Tk()

btn = ttk.Button(root, text='Save')
btn.bind('<Return>', return_pressed)


btn.focus()
btn.pack(expand=True)

root.mainloop()Linguagem de código:  Python  ( python )

Neste exemplo, a instrução a seguir chama o bind()método no widget de botão para vincular o Returnevento de tecla pressionada:

btn.bind('<Return>', return_pressed)Linguagem de código:  HTML, XML  ( xml )

O exemplo a seguir ilustra como usar o bind()método para registrar vários manipuladores para o mesmo evento:

import tkinter as tk
from tkinter import ttk


def return_pressed(event):
    print('Return key pressed.')


def log(event):
    print(event)


root = tk.Tk()

btn = ttk.Button(root, text='Save')
btn.bind('<Return>', return_pressed)
btn.bind('<Return>', log, add='+')


btn.focus()
btn.pack(expand=True)

root.mainloop()Linguagem de código:  Python  ( python )

Quando você move o foco para o botão e pressiona a Returntecla, o Tkinter invoca automaticamente as funções return_pressede log.

O seguinte vincula a log()função ao Returnevento de tecla pressionada do 'Save'botão:

btn.bind('<Return>', log, add='+')Linguagem de código:  Python  ( python )

Nesta instrução, o terceiro argumento add='+'registrou um manipulador adicional, que é a log()função.

Se você não especificar o add='+'argumento, o bind()método substituirá o manipulador existente ( return_pressed) pelo novo ( log).

Padrões de eventos

Tkinter usa padrões de eventos para mapear nomes de eventos com manipuladores. Por exemplo, <Return>denota a tecla Return pressionada.

O seguinte mostra a sintaxe geral de um padrão de evento:

<modifier-type-detail>Linguagem de código:  HTML, XML  ( xml )

Nesta sintaxe, um evento é colocado entre colchetes angulares ( <>). Dentro dos colchetes angulares, há zero ou mais modificadores, um tipo de evento e informações detalhadas sobre o evento.

Por exemplo, <KeyPress-A>denota um pressionamento da tecla no teclado A. e <Alt-Control-KeyPress-KP_Delete>representa um pressionamento de tecla de Alt + Ctrl + Delete.

A seção a seguir mostra os modificadores de eventos, tipos de eventos e detalhes de eventos mais comumente usados.

1) Modificadores de eventos

A tabela a seguir lista os modificadores de eventos mais comumente usados:

Modificador de evento Significado
Alt. A tecla Alt é mantida pressionada
Ao controle A tecla Ctrl é mantida
Mudança A tecla Shift é mantida pressionada
Qualquer Este modificador torna um tipo de evento geral. Por exemplo, o padrão de evento <Any-KeyPress>se aplica ao pressionamento de qualquer tecla.

Tipos de eventos

A tabela a seguir mostra os tipos de eventos mais comumente usados:

Tipo Nome Descrição
36 Activate A opção de estado de um widget muda de inativo para ativo.
4 Button Um botão do mouse é pressionado
5 ButtonRelease Um botão do mouse é liberado
22 Configure O tamanho do widget foi alterado
37 Deactivate A opção de estado de um widget muda de ativo para inativo.
17 Destroy Um widget está sendo destruído.
7 Enter O ponteiro do mouse é movido para uma parte visível de um widget.
12 Expose Alguma parte do widget ou aplicativo fica visível após ter sido coberta por outra janela.
9 FocusIn O foco de entrada foi movido para um widget.
10 FocusOut O foco de entrada foi removido de um widget.
2 KeyPress Uma tecla é pressionada.
3 KeyRelease Uma chave é liberada
8 Leave O ponteiro do mouse é movido para fora de um widget.
19 Map Um widget está sendo colocado em um contêiner, por exemplo, chamando o método pack() ou grid().
6 Motion O ponteiro do mouse é movido inteiramente dentro de um widget.
38 MouseWheel O usuário moveu a roda do mouse para cima ou para baixo.
18 Unmap Um widget está sendo desmapeado e não está mais visível, por exemplo, ao chamar o grid_remove() método no widget.
15 Visibility Pelo menos alguma parte da janela do aplicativo fica visível na tela.

Detalhe do Evento

A tabela a seguir mostra diversas maneiras de nomear chaves:

.keysym .keycode .keysym_num Chave
Alt_L 64 65513 A tecla Alt esquerda
Alt_R 113 65514 A tecla Alt direita
BackSpace 22 65288 retroceder
Cancel 110 65387 quebrar
Caps_Lock 66 65549 Caps Lock
Control_L 37 65507 A tecla de controle do lado esquerdo
Control_R 109 65508 A tecla de controle do lado direito
Delete 107 65535 Excluir
Down 104 65364
End 103 65367 fim
Escape 9 65307 esc
Execute 111 65378 SysReq
F1 67 65470 Tecla de função F1
F2 68 65471 Tecla de função F2
Fi 66+i 65469+i Tecla de função F i
F12 96 65481 Tecla de função F12
Home 97 65360 lar
Insert 106 65379 inserir
Left 100 65361
Linefeed 54 106 Alimentação de linha (controle-J)
KP_0 90 65438 0 no teclado
KP_1 87 65436 1 no teclado
KP_2 88 65433 2 no teclado
KP_3 89 65435 3 no teclado
KP_4 83 65430 4 no teclado
KP_5 84 65437 5 no teclado
KP_6 85 65432 6 no teclado
KP_7 79 65429 7 no teclado
KP_8 80 65431 8 no teclado
KP_9 81 65434 9 no teclado
KP_Add 86 65451 + no teclado
KP_Begin 84 65437 A tecla central (mesma tecla 5) no teclado
KP_Decimal 91 65439 Decimal ( .) no teclado
KP_Delete 91 65439 excluir no teclado
KP_Divide 112 65455 / no teclado
KP_Down 88 65433 ↓ no teclado
KP_End 87 65436 terminar no teclado
KP_Enter 108 65421 digite no teclado
KP_Home 79 65429 casa no teclado
KP_Insert 90 65438 insira no teclado
KP_Left 83 65430 ← no teclado
KP_Multiply 63 65450 × no teclado
KP_Next 89 65435 PageDown no teclado
KP_Prior 81 65434 PageUp no teclado
KP_Right 85 65432 → no teclado
KP_Subtract 82 65453 - no teclado
KP_Up 80 65431 ↑ no teclado
Next 105 65366 Página para baixo
Num_Lock 77 65407 Num Lock
Pause 110 65299 pausa
Print 111 65377 ImprimirScrn
Prior 99 65365 Subir página
Return 36 65293 Tecla Enter
Right 102 65363
Scroll_Lock 78 65300 ScrollLock
Shift_L 50 65505 A tecla shift esquerda
Shift_R 62 65506 A tecla shift da direita
Tab 23 65289 A tecla tab

Vinculando eventos à janela raiz

Até agora, você aprendeu como vincular um evento a um widget específico. O Tkinter também permite vincular um evento à janela de nível superior.

Nesse caso, a sintaxe para the bind()é a mesma, exceto que você pode chamá-lo na janela raiz assim:

root.bind('<Return>', handler)Linguagem de código:  HTML, XML  ( xml )

Os níveis de ligação

No exemplo anterior, você aprendeu como vincular um evento a uma instância específica de um widget. Isso é chamado de vinculação em nível de instância .

O Tkinter também permite vincular um evento a todas as instâncias de um widget. Por exemplo, você pode vincular o evento a todas as caixas de texto de um programa:

root.bind_class('Entry', '<Control-V>', paste)Linguagem de código:  JavaScript  ( javascript )

A propósito, você usa o Entrywidget para criar uma caixa de texto no Tkinter.

Isso é chamado de ligação em nível de classe porque você vincula o evento a uma classe em vez de a uma instância.

Eventos de desvinculação

Às vezes, você pode querer desfazer o efeito de uma ligação anterior. Para fazer isso, você pode usar o unbind()método:

widget.unbind(event)Linguagem de código:  CSS  ( css )

O exemplo a seguir desvincula o evento do btnbotão:

btn.unbind('<Return>')Linguagem de código:  HTML, XML  ( xml )

Resumo

  • Use o bind()método para vincular um evento a um widget.
  • Tkinter suporta ligações em nível de instância e em nível de classe.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *