from tkinter import *
from tkinter import messagebox, scrolledtext
import time
import threading
import random
import winsound
insultos = [
"vai pó caralho!", "estás só a encher chouriços!", "pára de fazer merda!",
"não fazes nada de jeito!", "és um maluco!", "não faz sentido nenhum!",
"porra, presta atenção!", "estás a gozar, não?", "és mesmo burro!",
"acorda, pá!", "não tens nada nessa cabeça?", "olha a figura que estás a fazer!"
]
def mostrar_mensagem():
nome = entrada_nome.get().strip() # Remove espaços em branco
if nome:
insulto = f"{nome}, {random.choice(insultos)}"
texto_insulto.config(text=insulto)
atualizar_contador()
adicionar_historico(insulto)
fade_in_effect()
shake_animation()
tocar_som()
else:
messagebox.showwarning("Atenção", "Digite o nome da pessoa primeiro.")
def fade_in_effect():
base_color = "#ff6666" # Base color
for alpha in range(0, 101, 5):
# Calculate intensity based on alpha value (0-255)
r = int(255 * (alpha / 100)) # Fade effect from black to full color
g = int(102 * (alpha / 100)) # Green component (fixed for base color)
b = int(102 * (alpha / 100)) # Blue component (fixed for base color)
# Create a valid hex color code
color = f"#{r:02x}{g:02x}{b:02x}"
texto_insulto.config(fg=color)
root.update()
time.sleep(0.05)
def shake_animation():
x_original, y_original = texto_insulto.winfo_x(), texto_insulto.winfo_y()
for _ in range(10):
texto_insulto.place(x=x_original + random.randint(-10, 10), y=y_original + random.randint(-5, 5))
root.update()
time.sleep(0.03)
texto_insulto.place(x=x_original, y=y_original)
# Função para atualizar o contador de insultos
def atualizar_contador():
global contador
contador += 1
texto_contador.config(text=f"Insultos: {contador}")
# Função para adicionar o insulto ao histórico
def adicionar_historico(insulto):
historico.insert(END, f"{contador}. {insulto}\n")
historico.see("end") # Rola para o final do histórico
# Função para o efeito de hover no botão
def on_enter(e):
botao.config(bg="#ff6666")
def on_leave(e):
botao.config(bg="#49e3e3")
# Função para tocar um som ao insultar
def tocar_som():
threading.Thread(target=lambda: winsound.Beep(800, 300)).start() # Frequência e duração
# Função para resetar o contador e o histórico
def resetar():
global contador
contador = 0
texto_contador.config(text="Insultos: 0")
texto_insulto.config(text="")
historico.delete(1.0, END)
# Função para alternar as cores automaticamente
def modo_festa():
while festa_var.get():
root.config(bg=random.choice(["#103030", "#ff6666", "#49e3e3", "#ffffff", "#000000"]))
texto_insulto.config(fg=random.choice(["#ff6666", "#49e3e3", "#103030"]))
root.update()
time.sleep(0.1)
# Função para iniciar o modo festa em uma thread separada
def iniciar_festa():
threading.Thread(target=modo_festa).start()
# Configuração da janela principal
root = Tk()
root.geometry("800x500")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Insultar uma Pessoa")
# Contador de insultos
contador = 0
# Frame para o título
frame_titulo = Frame(root, bg="#103030")
frame_titulo.pack(pady=10)
titulo = Label(frame_titulo, text="Insultar uma Pessoa", font=("Arial", 18, "bold"), bg="#103030", fg="#49e3e3")
titulo.pack()
# Frame para entrada de nome e botão
frame_input = Frame(root, bg="#103030")
frame_input.pack(pady=20)
label_nome = Label(frame_input, text="Nome da pessoa:", font=("Arial", 12), bg="#103030", fg="#ffffff")
label_nome.grid(row=0, column=0, padx=10)
entrada_nome = Entry(frame_input, font=("Arial", 12), width=30)
entrada_nome.grid(row=0, column=1, padx=10)
botao = Button(frame_input, text="Insultar", font=("Arial", 12, "bold"), bg="#49e3e3", fg="#103030",
command=mostrar_mensagem)
botao.grid(row=0, column=2, padx=10)
botao.bind("<Enter>", on_enter)
botao.bind("<Leave>", on_leave)
# Frame para o texto de insulto e contador
frame_output = Frame(root, bg="#103030")
frame_output.pack(pady=20)
texto_insulto = Label(frame_output, text="", font=("Arial", 20, "bold"), bg="#103030", fg="#ff6666")
texto_insulto.pack()
texto_contador = Label(frame_output, text="Insultos: 0", font=("Arial", 14), bg="#103030", fg="#ffffff")
texto_contador.pack()
# Histórico de insultos com scrollbar
frame_historico = Frame(root, bg="#103030")
frame_historico.pack(pady=20)
historico_label = Label(frame_historico, text="Histórico de Insultos:", font=("Arial", 12), bg="#103030", fg="#ffffff")
historico_label.pack(anchor="w")
historico = scrolledtext.ScrolledText(frame_historico, width=70, height=8, font=("Arial", 10), wrap=WORD)
historico.pack()
# Botão de reset
botao_reset = Button(root, text="Resetar", font=("Arial", 12, "bold"), bg="#ff6666", fg="#ffffff", command=resetar)
botao_reset.pack(pady=10)
# Checkbox para modo festa
festa_var = BooleanVar()
checkbox_festa = Checkbutton(root, text="Modo Festa", variable=festa_var, font=("Arial", 12), bg="#103030",
fg="#49e3e3", command=iniciar_festa)
checkbox_festa.pack()
root.mainloop()