Mundo em Python

Ordenador de Palavras

import tkinter as tk
from tkinter import StringVar, END, scrolledtext # Importar scrolledtext para facilidade

def ordenar_palavras_gui():

entrada_utilizador = Frase.get() # Obtém o texto da caixa de entrada

# Limpa a área de texto antes de cada novo resultado
resultado_texto.config(state='normal') # Permite escrever no Text widget
resultado_texto.delete(1.0, END) # Apaga todo o conteúdo

if not entrada_utilizador.strip():
resultado_texto.insert(tk.END, "Nenhuma palavra foi introduzida. Por favor, tente novamente.")
resultado_texto.config(fg="red") # Muda a cor do texto para vermelho
resultado_texto.config(state='disabled') # Desativa a edição do Text widget
return

# Processar e dividir a entrada em palavras
entrada_processada = entrada_utilizador.replace(',', ' ')
palavras_originais = entrada_processada.split() # Limpar as palavras
lista_palavras = [palavra.strip() for palavra in palavras_originais if palavra.strip()] if not lista_palavras:
resultado_texto.insert(tk.END, "Não foram encontradas palavras válidas após o processamento. Por favor, tente novamente.")
resultado_texto.config(fg="red")
resultado_texto.config(state='disabled')
return

# Ordenar as palavras alfabeticamente (ignorando maiúsculas/minúsculas)
palavras_ordenadas = sorted(lista_palavras, key=str.lower) # Formatar o resultado para exibição (uma palavra por linha)
resultado_formatado = "\n".join(palavras_ordenadas) # Exibir as palavras ordenadas na Text widget
resultado_texto.insert(tk.END, resultado_formatado)
resultado_texto.config(fg="black") # Volta a cor do texto para preto
resultado_texto.config(state='disabled') # Desativa a edição do Text widget

def limpar():
"""Limpa a caixa de entrada e a área de resultados."""
Frase_entrada.delete(0, END)
resultado_texto.config(state='normal') # Permite escrever no Text widget
resultado_texto.delete(1.0, END) # Apaga todo o conteúdo do Text widget
resultado_texto.config(fg="black") # Volta a cor do texto para preto
resultado_texto.config(state='disabled') # Desativa a edição do Text widget

# --- Configuração da Janela Tkinter ---
root = tk.Tk()
root.geometry("600x550") # Aumentei a altura para acomodar a área de texto com scroll
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Ordenador de Palavras") # --- Widgets da Interface ---

# Título Principal
titulo = tk.Label(root, text="Ordenador de Palavras",
font=("Arial", "28", "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.15, rely=0.03) # Ajustei um pouco a posição

# Label "Frase :"
texto_sub1 = tk.Label(root, text="Frase :",
font=("Arial", "18", "bold"), bg="#103030", fg="#49e3e3")
texto_sub1.place(relx=0.05, rely=0.25) # Ajustei um pouco a posição

# Caixa de Entrada de Texto
Frase = StringVar()
Frase_entrada = tk.Entry(root, textvariable=Frase,
font=("Arial", "12", "bold"),
bg="white", fg="blue", justify='center')
Frase_entrada.place(relx=0.25, rely=0.26, relwidth=0.7) # Ajustei um pouco a posição

# Botões de Ação
but1 = tk.Button(root, text="Ordenar", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=ordenar_palavras_gui)
but1.place(relx=0.1, rely=0.38, relwidth=0.25, relheight=0.08) # Ajustei a posição e altura

but_limpar = tk.Button(root, text="Limpar", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=limpar)
but_limpar.place(relx=0.4, rely=0.38, relwidth=0.25, relheight=0.08) # Ajustei a posição e altura

but_sair = tk.Button(root, text="Sair", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=root.destroy)
but_sair.place(relx=0.7, rely=0.38, relwidth=0.25, relheight=0.08) # Ajustei a posição e altura

# --- Área para Exibir o Resultado com Scrollbar ---

# Frame para agrupar o Text widget e a Scrollbar
frame_resultado = tk.Frame(root, bg="#cfe2f3", bd=2, relief="sunken") # Adicionado um frame para organização
frame_resultado.place(relx=0.05, rely=0.5, relwidth=0.9, relheight=0.45) # Aumentei a altura

# Text widget para exibir o resultado
resultado_texto = tk.Text(frame_resultado,
font=("Arial", 12, "bold"), bg="#cfe2f3", fg="black",
wrap="word", # Quebra palavras em vez de caracteres
state='disabled', # Começa desativado para não ser editável
padx=5, pady=5) # Padding interno para o texto
resultado_texto.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) # Empacota para preencher o frame

# Scrollbar vertical
scrollbar = tk.Scrollbar(frame_resultado, command=resultado_texto.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y) # Empacota à direita e preenche verticalmente

# Conectar a scrollbar ao Text widget
resultado_texto.config(yscrollcommand=scrollbar.set) # Iniciar o Loop Principal do Tkinter
root.mainloop()
0