Enviar um café pro programador

O evento < Return > : Apertando Enter

Neste tutorial, vamos aprender como lidar e tratar o evento de pressionar a tecla enter do teclado, através do <Return> event.

Através de um programinha simples, vamos entender o que ocorre por trás dos panos quando você digita a tecla enter do seu teclado e algo acontece em um programa.



<Return> event - Pressionar tecla enter

Sem mais delongas, vamos criar a seguinte aplicação:

Evento de dar enter

Na janelinha principal, exibimos um widget do tipo Entry de entrada de dados.
Você digita algo e dá enter.


Ao fazer isso, vai abrir uma nova janela, com o nome do widget e o conteúdo que está dentro dele.
Vamos te mostrar o código, e logo abaixo, a explicação:

from tkinter import *
from tkinter import messagebox

class EntryTeste( Frame ):
 def __init__( self ):
  # Inicializando configurações do frame
  Frame.__init__(self)
  self.pack()
  self.master.title( "<Return> teste" )
  self.master.geometry( "300x50" )
  self.frame = Frame( self )
  self.frame.pack( pady = 5 )
  
  # Criando a caixa de entrada
  self.caixa = Entry( self.frame, name = "caixa1" )
  
  # Fazendo o bind dela com o event handler exibe() 
  self.caixa.bind( "<Return>", self.exibe )
  self.caixa.pack( side = LEFT, padx = 5 )
  
  # Looping pra rodar a GUI
  self.mainloop()
  
 # Event handler
 def exibe(self, event):
  nomeCaixa = event.widget.winfo_name()
  conteudoCaixa = event.widget.get()
  messagebox.showinfo( "Texto na caixa", "Nome do widget: " + nomeCaixa + "\nConteúdo: " + conteudoCaixa )
  
# Criando um objeto
minhaGui = EntryTeste()

A classe onde toda mágica vai acontecer se chama EntryTeste() e ela herda a classe Frame.
Ou seja, ela é um frame também, ela vai ser a janela principal.

Iniciamos o método construtor chamando o construtor da classe base, e em seguida se empacotando.
Com o método master.title(string) definimos o título da janelinha que vai abrir.
Com o método master.geometry("largura x comprimento") definimos o tamanho do frame.

Depois, criamos o frame frame1 que vai ser o container da caixa de entrada, e empacotamos ele com o espaçamento vertical (pad y) de 5 pixels.


Vamos criar a caixa de entrada, objeto de nome caixa do tipo Entry, vamos dar o nome de caixa1 pra esse widget.

Agora vem a parte mais importante, o bind.
Vamos ligar o evento <Return>, que representa o ato de apertar o enter com o event handler de nome exibe, que é um método que será chamado sempre que você der enter.

Esse método recebe o objeto event.
Vamos extrair algumas informações interessantes desse objeto.

Vamos usar: event.widget.winfo_name() pra pegar o nome do widget
E também: event.widget.get() pra pegar o conteúdo que foi digitado na caixa de entrada.

Em seguida, esse método, que é nosso event handler (tratador de eventos), vai exibir uma caixa de diálogo com essas duas informações: nome do widget e conteúdo que você escreveu nele, antes de dar enter.
Conseguiram entender?

Quebrando a cabeça

Não tenha vergonha de ter que ler, reler, quebrar a cabeça, mexer uma coisa aqui, alterar outra ali.
Faz parte do aprendizado.

Rode o código a seguir, e tente entender linha por linha o que está acontecendo.
Se tiver dúvida de algo, não existe em pesquisar no Google, todo programador faz isso, sempre, pro resto da vida, mesmo os melhores do mundo.


from tkinter import *
from tkinter import messagebox

class EntryTeste( Frame ):
 def __init__( self ):
  # Inicializando os frames, títulos e tamanhos
  Frame.__init__( self )
  self.pack( expand = YES, fill = BOTH )
  self.master.title( "Componentes de entrada" )
  self.master.geometry( "325x100" ) # width x length
  
  # Criando o primeiro frame que vai armazenar
  # as duas primeiras caixas de entrada
  self.frame1 = Frame( self )
  self.frame1.pack( pady = 5 )
  
  # Criando a primeira caixa de entrada
  self.text1 = Entry( self.frame1, name = "caixa1" )
  
  # Associando o evento <Return> com o
  # event handler exibe()
  self.text1.bind( "<Return>", self.exibe )
  self.text1.pack( side = LEFT, padx = 5 )
  
  # Criando a segunda caixa e seu bind
  self.text2 = Entry( self.frame1, name = "caixa2" )
  self.text2.insert( INSERT, "Digite um texto aqui" )
  self.text2.bind( "<Return>", self.exibe )
  self.text2.pack( side = LEFT, padx = 5 )
  
  # Segundo frame, com as duas outras caixas
  self.frame2 = Frame( self )
  self.frame2.pack( pady = 5 )
  
  # Criando a caixa que não dá pra editar
  self.text3 = Entry( self.frame2, name = "caixa3" )
  self.text3.insert( INSERT, "Texto ineditável" )
  self.text3.config( state = DISABLED )
  self.text3.bind( "<Return>", self.exibe )
  self.text3.pack( side = LEFT, padx = 5 )
  
  # Criando a caixa estilo senha
  self.text4 = Entry( self.frame2, name = "caixa4", show = "*" )
  self.text4.insert( INSERT, "Texto escondido" )
  self.text4.bind( "<Return>", self.exibe )
  self.text4.pack( side = LEFT, padx = 5 )
  
  mainloop()
 
 def exibe( self, event ):
  # Pegando o nome do widget
  nomeCaixa = event.widget.winfo_name()
  # Pegando o conteúdo do widget
  conteudoCaixa = event.widget.get()
  messagebox.showinfo( "Texto na caixa", nomeCaixa + ": " + conteudoCaixa )
  
# Chamando a classe
EntryTeste()


Nenhum comentário:

Postar um comentário