Componentes Ttk
A biblioteca ttk
(Themed Tkinter Widgets) faz parte do módulo tkinter
e oferece widgets com visual mais moderno e opções de personalização aprimoradas em relação aos widgets clássicos do Tkinter
Esta biblioteca deve ser importada do módulo tkinter:
from tkinter import Tk
from tkinter import ttk
Criar uma janela básica com ttk
root = Tk()
root.title("Exemplo com ttk")
frame = ttk.Frame(root, padding=10)
frame.grid()
ttk.Label(frame, text="Olá, mundo!").grid(column=0, row=0)
ttk.Button(frame, text="Sair", command=root.destroy).grid(column=1, row=0)
root.mainloop()
Saída:

Estilizar componentes ttk
Para podermos estilizar um componente ttk usamos a classe Style que teremos de instanciar:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
style = ttk.Style(root)
A partir daqui, podemos usar o objeto style para estilizarmos um componente.
Estilo padrão de um componente
Por defeito, um componente ttk já com com um estilo padrão pré-definido.
Podemos obter o estilo padrão de um componente atrav~es de widget.winfo_class()
:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
botao = ttk.Button(root, text="Clique aqui")
botao.pack()
print(botao.winfo_class()) # Saída: "TButton"
root.mainloop()
NOTA: O nome do estilo padrão geralmente é "T"
+ nome do widget (ex: "TLabel"
, "TButton"
).
Podemos modificar o estilo padrão de um componente ou podemos criar um novo estilo para um componente.
Para criarmos/modificarmos um estilo de um componente temos de ter em conta que:
O mérodo configure()
altera propriedades estáticas, enquanto map()
define propriedades dinâmicas baseadas no estado (ex: ativo, pressionado).
Modificar o estilo padrão de um componente
Exemplo: alterar a fonte e a cor do texto de todos os botões (TButton
):
style.configure("TButton", font=("Helvetica", 12), foreground="blue")
O código acima altera o estilo pata todos os componentes Button.
Exemplo completo:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
style = ttk.Style(root)
botao = ttk.Button(root, text="Clique aqui")
style.configure("TButton", font=("Helvetica", 12), foreground="blue")
botao.pack()
root.mainloop()
Saída:

Personalizar o estilo de um componente
Podemos criar um novo estilo baseado em um existente, nomeando-o com o formato "Nome.TWidget"
:
style.configure("MeuBotao.TButton", foreground="red", padding=10)
Depois, aplicamos esse estilo ao widget:
botao = ttk.Button(root, text="Clique aqui", style="MeuBotao.TButton")
botao.pack()
Definir estilos dinâmicos para estados do widget com map()
Podemos mudar propriedades conforme o estado do widget, como quando o botão está pressionado ou ativo:
style.map("MeuBotao.TButton",
foreground=[('pressed', 'white'), ('active', 'orange')],
background=[('pressed', 'black'), ('active', 'yellow')])
Exemplo completo:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
style = ttk.Style(root)
# Configura estilo base para botões
style.configure("TButton", font=("Arial", 10), padding=5)
# Cria estilo customizado
style.configure("Alerta.TButton", foreground="red", font=("Arial", 12, "bold"))
style.map("Alerta.TButton",
foreground=[('pressed', 'white'), ('active', 'orange')],
background=[('pressed', 'black'), ('active', 'yellow')])
btn1 = ttk.Button(root, text="Botão padrão")
btn1.pack(pady=10)
btn2 = ttk.Button(root, text="Botão alerta", style="Alerta.TButton")
btn2.pack(pady=10)
root.mainloop()
Saída:

Resumo
Podemos criar estilos personalizados e aplicá-los aos widgets para mudar cor, fonte e outros atributos.
Use ttk
para interfaces mais modernas.
Os widgets são usados de forma semelhante aos clássicos, mas com mais opções de estilo.
Utilize ttk.Style
para personalizar a aparência dos componentes.
Para projetos novos, prefira sempre os widgets do ttk
ao invés dos clássicos do Tkinter.