Gerador de Senhas Memoráveis

 

from tkinter import *
import random
from tkinter import messagebox

root = Tk()

palavras = [
"sol", "lua", "estrela", "floresta", "rio", "montanha",
"gato", "cachorro", "livro", "casa", "carro", "viagem",
"praia", "mar", "cachoeira", "flor", "amigo", "felicidade",
"doce", "chocolate", "musica", "dança", "vento", "nuvem",
"arvore", "pássaro", "cebola", "caneta", "janela", "computador",
"futebol", "bicicleta", "luz", "chave", "relogio"
]

simbolos = ["!", "@", "#", "$", "%", "&", "?"]
numeros = [str(i) for i in range(10)]

root.geometry("750x350")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Gerador de Senhas Memoráveis")

# Título
titulo = Label(
text="Gerador de Senhas Memoráveis",
font=("Arial", 28, "bold"),
bg="#103030",
fg="#49e3e3"
)
titulo.place(relx=0.15, rely=0.05)

# Subtítulo
texto_sub1 = Label(
text="Número de palavras:",
font=("Arial", 18, "bold"),
bg="#103030",
fg="#49e3e3"
)
texto_sub1.place(relx=0.15, rely=0.32)

# Entrada do número de palavras
Numero_palavras = StringVar()
Numero_palavras_entrada = Entry(
textvariable=Numero_palavras,
font=("Arial", 12, "bold"),
bg="white",
fg="blue",
justify='center'
)
Numero_palavras_entrada.place(relx=0.55, rely=0.33, relwidth=0.35)
Numero_palavras_entrada.focus()

# Função limpar
def limpar():
resultado_texto.config(text="")

# Função copiar senha
def copiar_senha():
senha = resultado_texto.cget("text")
if senha:
root.clipboard_clear()
root.clipboard_append(senha)
messagebox.showinfo("Copiado!", "Senha copiada para a área de transferência!")
else:
messagebox.showwarning("Atenção", "Nenhuma senha para copiar!")

# Função para alternar maiúsculas e minúsculas aleatoriamente
def alternar_maiusculas(palavra):
resultado = ""
for letra in palavra:
if random.choice([True, False]):
resultado += letra.upper()
else:
resultado += letra.lower()
return resultado

# Função principal do gerador
def app():
try:
num_palavras = int(Numero_palavras.get())

if num_palavras <= 0 or num_palavras > len(palavras):
messagebox.showerror("Erro", "Digite um número válido de palavras.")
return

senha_palavras = random.sample(palavras, num_palavras)
senha = ""

# Alterna maiúsculas/minúsculas aleatoriamente para cada palavra
senha_palavras = [alternar_maiusculas(p) for p in senha_palavras]

# Combina as palavras
senha = "".join(senha_palavras)

# Escolhe um número e um símbolo
numero_aleatorio = random.choice(numeros)
simbolo_aleatorio = random.choice(simbolos)

# Insere número e símbolo em posição aleatória no meio
posicao_insercao = random.randint(1, len(senha)-1)
senha = senha[:posicao_insercao] + numero_aleatorio + simbolo_aleatorio + senha[posicao_insercao:]

resultado_texto.config(text=senha)

except ValueError:
messagebox.showerror("Erro", "Digite apenas números!")

# Botões
but1 = Button(
text="Gerar Senha",
bd=2,
bg='#107db2',
fg='white',
font=('verdana', 12, 'bold'),
command=app
)
but1.place(relx=0.05, rely=0.55, relwidth=0.2, relheight=0.1)

but_copiar = Button(
text="Copiar Senha",
bd=2,
bg='#28a745',
fg='white',
font=('verdana', 12, 'bold'),
command=copiar_senha
)
but_copiar.place(relx=0.3, rely=0.55, relwidth=0.2, relheight=0.1)

but_limpar = Button(
text="Limpar",
bd=2,
bg='#ffc107',
fg='white',
font=('verdana', 12, 'bold'),
command=limpar
)
but_limpar.place(relx=0.55, rely=0.55, relwidth=0.2, relheight=0.1)

but_sair = Button(
text="Sair",
bd=2,
bg='#dc3545',
fg='white',
font=('verdana', 12, 'bold'),
command=root.destroy
)
but_sair.place(relx=0.8, rely=0.55, relwidth=0.15, relheight=0.1)

# Label para resultado
resultado_texto = Label(
text="",
font=("Arial", 14, "bold"),
bg="#cfe2f3"
)
resultado_texto.place(relx=0.05, rely=0.75, relwidth=0.9, relheight=0.15)

root.mainloop()

Comentários

Mensagens populares deste blogue

Criar Cartões de Visita

12 signos egípcios

Calcular a percentagem de ocupação