Como Criar Interfaces Gráficas com Tkinter no Python

Atualizado em: 13/07/2026
Tempo de leitura: 4 minutos
texto Tkinter com uma interface gráfica dele ao lado

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 tkinter

Se 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

WidgetFunçãoExemplo de uso
LabelExibe textos ou imagensTítulos e mensagens
ButtonExecuta uma função ao clicarSalvar, calcular ou fechar
EntryRecebe texto em uma linhaNome, e-mail ou número
TextRecebe textos com várias linhasObservações e editores
FrameAgrupa outros widgetsOrganização da interface
CheckbuttonRepresenta uma opção marcada ou desmarcadaPreferências
RadiobuttonSeleciona uma opção entre váriasPlanos ou categorias
ListboxExibe uma lista selecionávelItens, 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() e grid() no mesmo contêiner. Você pode usar gerenciadores diferentes em Frames 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ão command=minha_funcao().
  • Misturar pack e grid no 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.

Compartilhe:

Facebook
WhatsApp
Twitter
LinkedIn

Conteúdo do artigo

    Artigos relacionados

    Pesquisa em documentos PDF com Python e RAG
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como criar um chatbot com PDFs e RAG em Python

    Aprenda a criar um chatbot com PDFs e RAG em Python, usando busca semântica para encontrar trechos e responder com

    Ler mais

    Tempo de leitura: 6 minutos
    23/07/2026
    Landing page simples criada com Python e Tailwind CSS
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como criar uma landing page simples com Python e Tailwind CSS

    Você já sentiu a necessidade de colocar uma ideia no ar rapidamente, mas se viu travado na complexidade do desenvolvimento

    Ler mais

    Tempo de leitura: 11 minutos
    19/04/2026
    Sistema de tradução automática desenvolvido com Python
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como criar um sistema de tradução automática com Python

    Criar um sistema de tradução automática com Python é uma das formas mais fascinantes de entrar no mundo da Inteligência

    Ler mais

    Tempo de leitura: 10 minutos
    17/04/2026
    Sistema de lembretes e alarmes desenvolvido com Python
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como criar um sistema de lembretes com alarme em Python

    Criar um sistema de lembretes com alarme em Python é um dos projetos mais gratificantes para quem está dando os

    Ler mais

    Tempo de leitura: 10 minutos
    10/04/2026
    Extração de dados de tabelas de sites usando Python e pandas
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como extrair dados de tabelas em sites com Python e Pandas

    Você já se deparou com um site repleto de informações úteis organizadas em tabelas, mas sentiu que copiar e colar

    Ler mais

    Tempo de leitura: 10 minutos
    09/04/2026
    Conversão de áudio para texto usando Python gratuitamente
    Projetos
    Foto de perfil de Leandro Hirt da Academify

    Como converter áudio em texto com Python de forma gratuita

    Transformar arquivos de áudio em texto é uma das tarefas mais úteis e requisitadas na era da inteligência artificial e

    Ler mais

    Tempo de leitura: 10 minutos
    08/04/2026