Oi pessoal sejam bem vindos
Este é mais um novo tutorial em nossa lista de projetos Python para iniciantes, e hoje vamos construir um gerador de senhas.
Este projeto não requer muita complexidade, mas é ótimo para praticar Python, pois você aprenderá mais técnicas que pode usar em seus projetos Python futuros.
Aqui usaremos o Tkinter para os gráficos, e é necessário que você tenha conhecimentos básicos de Python.
from tkinter import *
from tkinter import ttk
Em seguida, crie uma nova janela do tkinter e faça algumas configurações básicas nela.
from tkinter import *
from tkinter import ttk
################# cores ###############
co0 = "#444466" # Preta
co1 = "#feffff" # branca
co2 = "#f05a43" # vermelha
janela = Tk()
janela.title('')
janela.geometry('295x350')
janela.configure(bg=co1)
janela.mainloop()
Ok, depois disso, vamos dividir nossa janela principal em duas partes, e faremos isso usando frames.
################# Frames ####################
frame_cima = Frame(janela, width=280, height=50,bg=co1, pady=0, padx=0, relief="flat",)
frame_cima.grid(row=0, column=0, sticky=NSEW)
frame_baixo = Frame(janela, width=280, height=310,bg=co1, pady=0, padx=0, relief="flat",)
frame_baixo.grid(row=1, column=0, sticky=NSEW)
Defina um estilo de tema para nossa janela.
style = ttk.Style(janela)
style.theme_use("clam")
Agora vamos criar um novo Label sobre frame_cima, e neste Label mostraremos o nome de nosso aplicativo.
Mas antes disso, primeiro instale a biblioteca Pillow, usando o comando Pip install Pillow, pois vamos usá-lo para manipular o tamanho da imagem que usaremos como logotipo do aplicativo, E importe-o para o script.
# ---------------- Configuracoes do Frame cima ---------------------
img_0 = Image.open('password.png')
img_0 = img_0.resize((30, 30), Image.ANTIALIAS)
img_0 = ImageTk.PhotoImage(img_0)
app_imagem = Label(frame_cima, height=60, image=img_0, compound=LEFT,padx=10, relief="flat", anchor="nw", font=('Ivy 16 bold'), bg=co1)
app_imagem.place(x=2, y=0)
app_name = Label(frame_cima, text="GERADOR DE SENHAS", width=20, height=1, padx=0, relief="flat", anchor="nw", font=('Ivy 16 bold'), bg=co1, fg=co0)
app_name.place(x=35, y=2)
app_linha = Label(frame_cima, text="", width=290, height=1, padx=0, relief="flat", anchor="nw", font=('Arial 1'), bg=co2, fg=co1)
app_linha.place(x=0, y=35)
Muito bem, depois disso, agora iremos criar alguns elementos para o frame_baixo, e começaremos com o Label que nos mostrará a senha que foi gerada e depois iremos criar o Label para o frame que irá nos mostrar a quantidade de caracteres que nossa senha terá.
# ---------------- Configuracoes do Frame_baixo ---------------------
app_senha = Label(frame_baixo , text="- - -", width=26, height=2, padx=0, relief="solid", anchor="center", font=('Ivy 10 bold'), bg=co1, fg=co0)
app_senha.grid(row=0, column=0, columnspan=1, sticky=NSEW, pady=10, padx=3)
var =IntVar()
var.set(8)
app_info = Label(frame_baixo, text="Número total de caracteres na senha", height=1, padx=0, relief="flat", anchor="nw", font=('Ivy 10 bold'), bg=co1, fg=co0)
app_info.grid(row=1, column=0, columnspan=2, sticky=NSEW, pady=1, padx=5)
spin = Spinbox(frame_baixo, from_=0, to=20, width=5, textvariable=var)
spin.grid(row=2, column=0, sticky=NW, pady=5, padx=8)
Em seguida, iremos criar alguns Botões de Verificação para as opções de palavras, números e símbolos que a senha a ser criada terá.
Mas antes disso vamos criar algumas variáveis contendo esses valores.
import random
import string
alfabeto_menos = string.ascii_lowercase
alfabeto_mais = string.ascii_uppercase
numeros = '123456789'
simbolos = "[]{}()*;/,_-"
Agora vamos criar um novo frame e este frame será colocado aqui no frame_baixo, e nele colocaremos alguns frames e botões de verificação como dissemos acima.
# novo frame
frame_caracters = Frame(frame_baixo, width=280, height=210,bg=co1, pady=0, padx=0, relief="flat",)
frame_caracters.grid(row=3, column=0, sticky=NSEW)
# ------------ Letras maiúsculas ------------------
estado_1 = StringVar()
estado_1.set(False) # set check state
chek_1 = Checkbutton(frame_caracters,width=1, var=estado_1,onvalue=alfabeto_mais, offvalue='off', bg=co1)
chek_1.grid(row=0, column=0, sticky=NW, pady=5, padx=2)
app_info = Label(frame_caracters, text="ABC Letras maiúsculas", height=1, padx=0, relief="flat", anchor="nw",justify='center', font=('Ivy 10 bold'), bg=co1, fg=co0)
app_info.grid(row=0, column=1, sticky=NW, pady=5, padx=2)
# ------------ Letras minúsculas ------------------
estado_2 = StringVar()
estado_2.set(False) # set check state
chek_2 = Checkbutton(frame_caracters,width=1, var=estado_2,onvalue=alfabeto_menos, offvalue='off',bg=co1)
chek_2.grid(row=1, column=0, sticky=NW, pady=5, padx=2)
app_info = Label(frame_caracters, text="abc Letras minúsculas", height=1, padx=0, relief="flat", anchor="nw",justify='center', font=('Ivy 10 bold'), bg=co1, fg=co0)
app_info.grid(row=1, column=1, sticky=NW, pady=5, padx=2)
# ------------ Números ------------------
estado_3 = StringVar()
estado_3.set(False) # set check state
chek_3 = Checkbutton(frame_caracters,width=1, var=estado_3,onvalue=numeros, offvalue='off',bg=co1)
chek_3.grid(row=2, column=0, sticky=NW, pady=5, padx=2)
app_info = Label(frame_caracters, text="123 Números",height=1, padx=0, relief="flat", anchor="nw",justify='center', font=('Ivy 10 bold'), bg=co1, fg=co0)
app_info.grid(row=2, column=1, sticky=NW, pady=5, padx=2)
# ------------ Símbolos ------------------
estado_4 = StringVar()
estado_4.set(False) # set check state
chek_4 = Checkbutton(frame_caracters,width=1, var=estado_4, onvalue=simbolos, offvalue='off',bg=co1)
chek_4.grid(row=3, column=0, sticky=NW, pady=1, padx=2)
app_info = Label(frame_caracters, text="!@# Símbolos", height=1, padx=0, relief="flat", anchor="nw",justify='center', font=('Ivy 10 bold'), bg=co1, fg=co0)
app_info.grid(row=3, column=1, sticky=NW, pady=1, padx=2)
Ok, agora vamos criar o botão que será usado para gerar a senha.
# ------------ Botao gerar senha ------------------
b_gerar_senha = Button(frame_box, command=criar_senha, text="Gerar senha",width=32, height=1, overrelief=SOLID, bg=co3, fg="white", font=('Ivy 10 bold'), anchor="center", relief=FLAT )
b_gerar_senha.grid(row=5, column=0, sticky=NSEW, pady=20, padx=0, columnspan=5)
Agora vamos criar um novo botão que servirá para copiar a senha que será gerada.
b_copiar = Button(frame_baixo, text="Copiar",width=7, height=2, overrelief=SOLID, bg=co1, fg=co0, font=('Ivy 10 bold'), anchor="center", relief=RAISED )
b_copiar.grid(row=0, column=1, columnspan=1, sticky=NW, pady=10, padx=5)
Lógica do app
Ok, agora que terminamos de projetar nosso aplicativo, criaremos a lógica para o gerador de senha e, em seguida, criaremos uma função e colocaremos esse mesmo código nessa função e, finalmente, conecte esta função com o botão que permitirá gerar a nova senha.
E também dentro desta função que gera senha criaremos uma função que nos permitirá copiar a senha gerada, e então conectaremos esta função com o botão copiar senha.
O código será como mostrado abaixo.
# funcao para gerar a senha
def criar_senha():
alfabeto_menos = string.ascii_lowercase
alfabeto_mais = string.ascii_uppercase
numeros = '123456789'
simbolos = "[]{}()*;/,_-"
global combinar
# --- condicao para maiusculas
if estado_1.get() == alfabeto_mais:
combinar = alfabeto_mais
else:
pass
# --- condicao para minuscula
if estado_2.get() == alfabeto_menos:
combinar = combinar + alfabeto_menos
else:
pass
# --- condicao para numeros
if estado_3.get() == numeros:
combinar = combinar + numeros
else:
pass
# --- condicao para simbolos
if estado_4.get() == simbolos:
combinar = combinar + simbolos
else:
pass
# --- Comprimento da senha
comprimento = int(spin.get())
# --- Senha
senha = "".join(random.sample(combinar, comprimento))
app_senha['text'] = senha
# funcao para cpiar a senha
def copiar_senha():
info = senha
frame_box.clipboard_clear()
frame_box.clipboard_append(info)
messagebox.showinfo("Sucesso","A senha foi copiada com sucesso")
b_copiar = Button(frame_box, command=copiar_senha, text="Copiar",width=7, height=1, overrelief=SOLID, bg=co1, fg=co0, font=('Ivy 10 bold'), anchor="center", relief=RAISED )
b_copiar.grid(row=0, column=2, columnspan=2, sticky=NSEW, pady=10, padx=1)
Assim finalizamos nosso aplicativo, se gostou dê um like, e se tiver alguma dúvida teremos o maior prazer em atendê-lo, basta comentar abaixo.
0 Comentários