Advertisement
MizunoBrasil

Organizador de Senhas (SIMPLES)

Jun 26th, 2023 (edited)
1,097
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.11 KB | None | 0 0
  1. import csv
  2. import PySimpleGUI as sg
  3. import webbrowser
  4. import pyperclip
  5.  
  6. def cadastrar_senha(site, url, login, senha):
  7.     # Abrir o arquivo CSV no modo de escrita
  8.     with open('senhas.csv', 'a', newline='') as file:
  9.         writer = csv.writer(file)
  10.         writer.writerow([site, url, login, senha])
  11.  
  12. def visualizar_senhas():
  13.     # Ler as senhas do arquivo CSV
  14.     senhas = []
  15.     with open('senhas.csv', 'r') as file:
  16.         reader = csv.reader(file)
  17.         for row in reader:
  18.             senhas.append(row)
  19.  
  20.     # Função para copiar login para área de transferência
  21.     def copy_login(row_index):
  22.         login = senhas[row_index][2]
  23.         pyperclip.copy(login)
  24.         sg.popup_timed("Login copiado para a área de transferência", keep_on_top=True, auto_close_duration=2)
  25.  
  26.     # Função para copiar senha para área de transferência
  27.     def copy_senha(row_index):
  28.         senha = senhas[row_index][3]
  29.         pyperclip.copy(senha)
  30.         sg.popup_timed("Senha copiada para a área de transferência", keep_on_top=True, auto_close_duration=2)
  31.  
  32.     # Layout da janela de visualização
  33.     layout = [
  34.         [sg.Table(values=senhas, headings=["Nome do Site", "URL do Site", "Login", "Senha"], justification="left", num_rows=20, col_widths=[30, 40, 20, 20], key="-TABLE-", enable_events=True, right_click_menu=['', ['CopyLogin', 'CopySenha']])],
  35.         [sg.Button("Abrir URL"), sg.Button("Editar"), sg.Button("Excluir")]
  36.     ]
  37.  
  38.     window = sg.Window("Visualizar Senhas", layout, finalize=True)
  39.  
  40.     while True:
  41.         event, values = window.read()
  42.  
  43.         if event == sg.WINDOW_CLOSED:
  44.             break
  45.  
  46.         if event == "Abrir URL":
  47.             selected_rows = values["-TABLE-"]
  48.             if len(selected_rows) > 0:
  49.                 row_index = selected_rows[0]
  50.                 url = senhas[row_index][1]  # Índice 1 corresponde à coluna da URL
  51.  
  52.                 # Abrir o navegador padrão com a URL clicada
  53.                 webbrowser.open(url)
  54.  
  55.         if event == "Editar":
  56.             selected_rows = values["-TABLE-"]
  57.             if len(selected_rows) > 0:
  58.                 row_index = selected_rows[0]
  59.                 site = senhas[row_index][0]
  60.                 url = senhas[row_index][1]
  61.                 login = senhas[row_index][2]
  62.                 senha = senhas[row_index][3]
  63.  
  64.                 # Abrir janela de edição com os valores preenchidos
  65.                 layout_edicao = [
  66.                     [sg.Text("Nome do Site")],
  67.                     [sg.InputText(site, key="-EDIT_SITE-", focus=True)],
  68.                     [sg.Text("URL do Site")],
  69.                     [sg.InputText(url, key="-EDIT_URL-")],
  70.                     [sg.Text("Login")],
  71.                     [sg.InputText(login, key="-EDIT_LOGIN-")],
  72.                     [sg.Text("Senha")],
  73.                     [sg.InputText(senha, key="-EDIT_SENHA-", password_char="*")],
  74.                     [sg.Button("Salvar")]
  75.                 ]
  76.                 window_edicao = sg.Window("Editar Senha", layout_edicao)
  77.                 while True:
  78.                     event_edicao, values_edicao = window_edicao.read()
  79.                     if event_edicao == sg.WINDOW_CLOSED:
  80.                         break
  81.                     if event_edicao == "Salvar":
  82.                         site = values_edicao["-EDIT_SITE-"]
  83.                         url = values_edicao["-EDIT_URL-"]
  84.                         login = values_edicao["-EDIT_LOGIN-"]
  85.                         senha = values_edicao["-EDIT_SENHA-"]
  86.                         # Atualizar a senha no arquivo CSV
  87.                         senhas[row_index] = [site, url, login, senha]
  88.                         with open('senhas.csv', 'w', newline='') as file:
  89.                             writer = csv.writer(file)
  90.                             writer.writerows(senhas)
  91.                         sg.popup("Senha atualizada com sucesso!")
  92.                         break
  93.  
  94.                 window_edicao.close()
  95.  
  96.         if event == "Excluir":
  97.             selected_rows = values["-TABLE-"]
  98.             if len(selected_rows) > 0:
  99.                 row_index = selected_rows[0]
  100.                 result = sg.popup_yes_no("Deseja realmente excluir esta senha?", title="Excluir Senha")
  101.                 if result == "Yes":
  102.                     # Remover a senha do arquivo CSV
  103.                     del senhas[row_index]
  104.                     with open('senhas.csv', 'w', newline='') as file:
  105.                         writer = csv.writer(file)
  106.                         writer.writerows(senhas)
  107.                     sg.popup("Senha excluída com sucesso!")
  108.  
  109.         if event == "CopyLogin":
  110.             selected_rows = values["-TABLE-"]
  111.             if len(selected_rows) > 0:
  112.                 row_index = selected_rows[0]
  113.                 copy_login(row_index)
  114.  
  115.         if event == "CopySenha":
  116.             selected_rows = values["-TABLE-"]
  117.             if len(selected_rows) > 0:
  118.                 row_index = selected_rows[0]
  119.                 copy_senha(row_index)
  120.  
  121.     window.close()
  122.  
  123. # Layout da janela de cadastro
  124. layout = [
  125.     [sg.Text("Nome do Site")],
  126.     [sg.InputText(key="-SITE-", focus=True)],
  127.     [sg.Text("URL do Site")],
  128.     [sg.InputText(key="-URL-")],
  129.     [sg.Text("Login")],
  130.     [sg.InputText(key="-LOGIN-")],
  131.     [sg.Text("Senha")],
  132.     [sg.InputText(key="-SENHA-", password_char="*")],
  133.     [sg.Button("Cadastrar")],
  134.     [sg.Button("Visualizar Senhas")]
  135. ]
  136.  
  137. window = sg.Window("Gerenciador de Senhas", layout)
  138.  
  139. while True:
  140.     event, values = window.read()
  141.  
  142.     if event == sg.WINDOW_CLOSED:
  143.         break
  144.  
  145.     if event == "Cadastrar":
  146.         site = values["-SITE-"]
  147.         url = values["-URL-"]
  148.         login = values["-LOGIN-"]
  149.         senha = values["-SENHA-"]
  150.  
  151.         cadastrar_senha(site, url, login, senha)
  152.  
  153.         # Limpar os campos de texto após cadastrar
  154.         window["-SITE-"].update("")
  155.         window["-URL-"].update("")
  156.         window["-LOGIN-"].update("")
  157.         window["-SENHA-"].update("")
  158.  
  159.         # Posicionar o cursor no campo "Nome do Site"
  160.         window["-SITE-"].set_focus()
  161.  
  162.     if event == "Visualizar Senhas":
  163.         visualizar_senhas()
  164.  
  165. window.close()
  166.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement