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.
- Estudar esse conteúdo offline: Apostila de Python
<Return> event - Pressionar tecla enter
Sem mais delongas, vamos criar a seguinte aplicação:- Vamos usar o widget Entry
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