Mundo em Python

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()
0