import tkinter as tk
from tkinter import ttk
class SettingsApp(tk.Tk):
def __init__(self):
super().__init__()
# Configurar a janela principal
self.title("Configurações do Aplicativo (Demo LabelFrame)")
self.geometry("600x400")
self.configure(bg='#f0f0f0')
# Criar o contêiner principal com preenchimento
main_container = ttk.Frame(self, padding="20")
main_container.pack(fill=tk.BOTH, expand=True)
# Criar e empacotar a seção de informações pessoais
self.create_personal_info_frame(main_container)
# Criar e empacotar a seção de preferências
self.create_preferences_frame(main_container)
# Criar e empacotar as configurações de notificação
self.create_notification_frame(main_container)
def create_personal_info_frame(self, parent: ttk.Frame) -> None:
"""Cria um LabelFrame para configurações de informações pessoais."""
personal_frame = ttk.LabelFrame(
parent,
text="Informações Pessoais",
padding="10"
)
personal_frame.pack(fill=tk.X, pady=(0, 10))
# Criar e empacotar os elementos do formulário
ttk.Label(personal_frame, text="Nome:").grid(row=0, column=0, sticky=tk.W, pady=5)
ttk.Entry(personal_frame).grid(row=0, column=1, sticky=tk.EW, padx=(10, 0))
ttk.Label(personal_frame, text="Email:").grid(row=1, column=0, sticky=tk.W, pady=5)
ttk.Entry(personal_frame).grid(row=1, column=1, sticky=tk.EW, padx=(10, 0))
# Configurar pesos das colunas da grade
personal_frame.columnconfigure(1, weight=1)
def create_preferences_frame(self, parent: ttk.Frame) -> None:
"""Cria um LabelFrame para preferências do aplicativo."""
pref_frame = ttk.LabelFrame(
parent,
text="Preferências do Aplicativo",
padding="10"
)
pref_frame.pack(fill=tk.X, pady=(0, 10))
# Seleção de tema
ttk.Label(pref_frame, text="Tema:").grid(row=0, column=0, sticky=tk.W, pady=5)
theme_combo = ttk.Combobox(
pref_frame,
values=["Light", "Dark", "System"],
state="readonly"
)
theme_combo.set("Light")
theme_combo.grid(row=0, column=1, sticky=tk.EW, padx=(10, 0))
# Seleção de idioma
ttk.Label(pref_frame, text="Idioma:").grid(row=1, column=0, sticky=tk.W, pady=5)
lang_combo = ttk.Combobox(
pref_frame,
values=["English", "Spanish", "French", "German"],
state="readonly"
)
lang_combo.set("English")
lang_combo.grid(row=1, column=1, sticky=tk.EW, padx=(10, 0))
# Configurar pesos das colunas da grade
pref_frame.columnconfigure(1, weight=1)
def create_notification_frame(self, parent: ttk.Frame) -> None:
"""Cria um LabelFrame para configurações de notificação."""
notif_frame = ttk.LabelFrame(
parent,
text="Configurações de Notificação",
padding="10"
)
notif_frame.pack(fill=tk.X)
# Notificações por email
ttk.Checkbutton(
notif_frame,
text="Habilitar notificações por email"
).grid(row=0, column=0, sticky=tk.W, pady=2)
# Notificações de desktop
ttk.Checkbutton(
notif_frame,
text="Habilitar notificações de desktop"
).grid(row=1, column=0, sticky=tk.W, pady=2)
# Notificações de som
ttk.Checkbutton(
notif_frame,
text="Habilitar notificações de som"
).grid(row=2, column=0, sticky=tk.W, pady=2)
if __name__ == "__main__":
app = SettingsApp()
app.mainloop()