Enviar um café pro programador

Recebendo dados do usuário: Entry widget

Neste tutorial de programação gráfica GUI em Python, vamos aprender o que é e como usar o widget Entry.

Recebendo informações do usuário

Até o momento, nossa única interação código-usuário foi através do clique do usuário em botões, seja em nossos buttons como em caixas de diálogo.

Porém, a forma mais comum de interação entre um programa e o usuário, é através daquelas áreas retangulares, onde escrevemos algum texto.

Por exemplo, para preencher o campo de nome, telefone, CEP, data de nascimento etc.



Geralmente, o normal é termos algo do tipo:

  • Um label com algum texto
  • Um campo de entrada, para escrevermos algo
  • Um botão, para fazer algo com o dado que escrevemos

Vejamos um print de uma aplicação real:

Como receber entrada do usuário

Como usar entradas: Entry widget

Vamos aprender como fazer o programinha do print anterior.

Na primeira janela, temos dois frames:
frame de cima: tem um label e um widget do tipo Entry
frame de baixo: dois botões

Após criar os objetos do tipo label e os frames, vamos criar nosso widget Entry.

  1. Ele recebe dois parâmetros:
  2. O container que ele vai estar (frame ou janela)
  3. width: número de caracteres que vai ser possível digitar no campo de texto

Vamos usar width=30
Em seguida, empacotamos o label e entry no frame de cima, lado a lado (side='left').
Nosso entry vai se chamar entrada e ele tem um método especial, o get(), que retorna uma string com o que foi digitado na caixa.

Em seguida, criamos dois botões.
O primeiro chama o método exibe(), onde esse método exibe uma string.
Por fim, um botão de quit.

Agora vamos empacotar esse botões no frame de baixo.
Depois empacotamos os dois frames na janela principal...e rodamos o programa!

Veja como fica o código completo:

from tkinter import *
from tkinter import messagebox

class MinhaGUI:
 def __init__(self):
  # Criamos a janela principal
  self.janela_principal = Tk()
  
  # Criando os frames
  self.frame_cima  = Frame(self.janela_principal) 
  self.frame_baixo = Frame(self.janela_principal) 
  
  # Criando label e botões do frame de cima
  self.label = Label(self.frame_cima, text='Digite seu nome:')
  
  # Criando o widget de entrada
  self.entrada = Entry(self.frame_cima, width=30)
  
  # Empacotando label e entrada no frame de cima
  self.label.pack(side='left')
  self.entrada.pack(side='left')
  
  # Criando os botões, no frame de baixo
  self.botao = Button(self.frame_baixo, text='Exibir', command=self.exibe)
  self.botao_sair = Button(self.frame_baixo, text='Sair', command=self.janela_principal.quit)
  
  # Empacotando os botões no frame de baixo
  self.botao.pack(side='left')
  self.botao_sair.pack(side='left')
  
  # Empacotando os botões janela principal
  self.botao.pack()
  self.botao_sair.pack()
  
  # Empacotando os frames na janela principal
  self.frame_cima.pack()
  self.frame_baixo.pack()
  
  # Rodando
  mainloop()

  
 def exibe(self):
  messagebox.showinfo('Python Progressivo','Seu nome é: '+ self.entrada.get())


gui = MinhaGUI()

Ou seja, o pulo do gato dos widgets Entry é o método get() que todo objeto desse tipo tem.
Esse método retorna SEMPRE uma string, com o que foi digitado.

Quer pegar um número? Ok, mas primeiro converte de string pra inteiro ou float, só depois usa o número. Mas é sempre uma string, ok?

Um comentário: