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.