O Tkinter é a biblioteca padrão do Python para criar interfaces gráficas com janelas, botões, campos de texto, menus e outros componentes. Neste guia, você vai abrir sua primeira janela, organizar widgets e construir um formulário funcional.
O que é Tkinter?
Tkinter é a interface do Python para o toolkit gráfico Tk. Ele é indicado para aprender programação orientada a eventos, criar ferramentas de desktop, protótipos e aplicações internas sem instalar frameworks gráficos complexos.
Em muitas instalações do Python, o Tkinter já está disponível. Para verificar, execute no terminal:
python -m tkinterSe uma pequena janela de demonstração for aberta, a biblioteca está funcionando corretamente.
Como criar a primeira janela com Tkinter
import tkinter as tk
janela = tk.Tk()
janela.title("Minha primeira interface")
janela.geometry("420x240")
mensagem = tk.Label(janela, text="Olá, Tkinter!")
mensagem.pack(pady=30)
janela.mainloop()O método tk.Tk() cria a janela principal. title() define o título, geometry() determina o tamanho inicial e mainloop() mantém a interface aberta, aguardando ações do usuário.
Principais widgets do Tkinter
| Widget | Função | Exemplo de uso |
|---|---|---|
Label | Exibe textos ou imagens | Títulos e mensagens |
Button | Executa uma função ao clicar | Salvar, calcular ou fechar |
Entry | Recebe texto em uma linha | Nome, e-mail ou número |
Text | Recebe textos com várias linhas | Observações e editores |
Frame | Agrupa outros widgets | Organização da interface |
Checkbutton | Representa uma opção marcada ou desmarcada | Preferências |
Radiobutton | Seleciona uma opção entre várias | Planos ou categorias |
Listbox | Exibe uma lista selecionável | Itens, arquivos ou usuários |
Para interfaces com aparência mais consistente, também é possível usar os widgets do módulo tkinter.ttk.
Como organizar os elementos: pack, grid e place
pack()
Organiza os elementos em blocos, um após o outro. É simples e funciona bem em interfaces pequenas.
tk.Label(janela, text="Título").pack(pady=10)
tk.Button(janela, text="Continuar").pack()grid()
Distribui os widgets em linhas e colunas. É a melhor escolha para formulários, calculadoras e telas com alinhamento regular.
tk.Label(janela, text="Nome:").grid(row=0, column=0, padx=8, pady=8)
tk.Entry(janela).grid(row=0, column=1, padx=8, pady=8)place()
Posiciona elementos por coordenadas ou proporções. Ele oferece controle preciso, mas tende a exigir mais manutenção quando a janela muda de tamanho.
Não use
pack()egrid()no mesmo contêiner. Você pode usar gerenciadores diferentes emFrames distintos.
Eventos e o parâmetro command
Uma interface gráfica reage a eventos. O evento mais comum é o clique em um botão, associado a uma função pelo parâmetro command.
import tkinter as tk
def alterar_texto():
mensagem.config(text="Botão clicado!")
janela = tk.Tk()
janela.title("Eventos no Tkinter")
mensagem = tk.Label(janela, text="Aguardando ação")
mensagem.pack(padx=30, pady=15)
tk.Button(janela, text="Clique aqui", command=alterar_texto).pack(pady=10)
janela.mainloop()Observe que usamos command=alterar_texto, sem parênteses. Assim, a função é executada somente quando o botão é clicado.
Projeto completo: formulário de cadastro
O exemplo a seguir combina ttk, campos de entrada, validação básica e uma caixa de mensagem.
import tkinter as tk
from tkinter import messagebox, ttk
def cadastrar():
nome = entrada_nome.get().strip()
email = entrada_email.get().strip()
if not nome or not email:
messagebox.showwarning("Campos obrigatórios", "Preencha nome e e-mail.")
return
if "@" not in email:
messagebox.showerror("E-mail inválido", "Digite um endereço de e-mail válido.")
return
resultado.config(text=f"Cadastro realizado para {nome}.")
entrada_nome.delete(0, tk.END)
entrada_email.delete(0, tk.END)
entrada_nome.focus()
janela = tk.Tk()
janela.title("Cadastro de usuário")
janela.resizable(False, False)
conteudo = ttk.Frame(janela, padding=20)
conteudo.grid()
ttk.Label(conteudo, text="Nome:").grid(row=0, column=0, sticky="w", pady=6)
entrada_nome = ttk.Entry(conteudo, width=32)
entrada_nome.grid(row=0, column=1, pady=6)
ttk.Label(conteudo, text="E-mail:").grid(row=1, column=0, sticky="w", pady=6)
entrada_email = ttk.Entry(conteudo, width=32)
entrada_email.grid(row=1, column=1, pady=6)
ttk.Button(conteudo, text="Cadastrar", command=cadastrar).grid(
row=2, column=0, columnspan=2, pady=12
)
resultado = ttk.Label(conteudo, text="")
resultado.grid(row=3, column=0, columnspan=2)
entrada_nome.focus()
janela.bind("<Return>", lambda evento: cadastrar())
janela.mainloop()Organizando uma aplicação Tkinter com classes
À medida que o projeto cresce, uma classe ajuda a reunir widgets, estado e eventos em uma estrutura mais clara.
import tkinter as tk
from tkinter import ttk
class Aplicacao(ttk.Frame):
def __init__(self, janela):
super().__init__(janela, padding=20)
self.grid()
self.texto = ttk.Label(self, text="Minha aplicação")
self.texto.grid(row=0, column=0, pady=10)
ttk.Button(
self,
text="Atualizar",
command=self.atualizar,
).grid(row=1, column=0)
def atualizar(self):
self.texto.config(text="Interface atualizada!")
janela = tk.Tk()
janela.title("Tkinter com classes")
Aplicacao(janela)
janela.mainloop()Para manter nomes, espaçamento e organização consistentes, consulte também o guia de PEP 8 no Python.
Erros comuns no Tkinter
- Esquecer o
mainloop(): sem ele, a janela não permanece ativa. - Executar uma função ao criar o botão: use
command=minha_funcao, nãocommand=minha_funcao(). - Misturar
packegridno mesmo contêiner: isso pode gerar conflito no layout. - Bloquear a interface: tarefas demoradas dentro do evento impedem a janela de responder.
- Usar variáveis locais que deixam de existir: mantenha referências aos widgets e às variáveis de controle enquanto forem necessárias.
Próximo projeto: calculadora gráfica
Uma calculadora é um ótimo exercício para combinar Entry, botões, eventos, validação e organização em funções. Veja o tutorial de como fazer uma calculadora em Python, que inclui uma versão completa com Tkinter.
Perguntas frequentes sobre Tkinter
Preciso instalar o Tkinter?
Em muitas instalações oficiais do Python, não. Execute python -m tkinter para verificar. Em algumas distribuições Linux, pode ser necessário instalar o pacote do sistema correspondente.
Tkinter serve para aplicações profissionais?
Sim, especialmente para ferramentas internas, utilitários e aplicações de desktop de pequeno e médio porte. A escolha depende das necessidades visuais, de distribuição e de manutenção do projeto.
Qual a diferença entre Tkinter e ttk?
tkinter fornece a base da interface. tkinter.ttk oferece widgets temáticos que seguem melhor a aparência do sistema operacional.
Como limpar um campo Entry?
Use campo.delete(0, tk.END). Para inserir um valor, use campo.insert(0, "texto").
Conclusão
Com Tkinter, você pode transformar scripts em aplicações de desktop interativas. Domine primeiro a janela principal, os widgets, os gerenciadores de layout e os eventos. Depois, organize o projeto com funções, frames e classes para criar interfaces mais fáceis de manter.







