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 command
opção. No entanto, é importante observar que nem todos os widgets Tkinter suportam a command
opçã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 event
ocorre um no widget
, o Tkinter invocará automaticamente o handler
com os detalhes do evento.
Se quiser registrar um manipulador adicional, você pode passar o '+'
para o add
argumento. 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_pressed
função ao Return
evento 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 Return
evento 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 Return
tecla, o Tkinter invoca automaticamente as funções return_pressed
e log
.
O seguinte vincula a log()
função ao Return
evento 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 Entry
widget 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 btn
botã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.