passman/PassmanGUI.py
anqude 2717384e8d
just new update
now it's able to import and export, etc
2023-10-11 13:54:14 +04:00

261 lines
8.5 KiB
Python

from customtkinter import CTkLabel,CTkButton,CTkEntry,CTkScrollableFrame,CTkTabview,CTk,get_appearance_mode,set_widget_scaling,set_window_scaling
from tkinter import PhotoImage
import os
import sys
window = CTk()
scriptdir=os.path.abspath(__file__)
try:
direct=scriptdir.removesuffix('\PassmanGUI.py')
assert os.path.isdir(direct), 'You fucked bro'
except:
direct=scriptdir.removesuffix('/PassmanGUI.py')
sys.path.append(direct)
from logics import *
window.title("PassMan by Anqude")
theme=get_appearance_mode()
if theme=="Dark":
bg_color="#242424"
fg_color="#dbdbdb"
else:
fg_color="#242424"
bg_color="#dbdbdb"
scriptdir=os.path.abspath(__file__)
os.chdir(direct)
window.tk.call('wm', 'iconphoto', window._w, PhotoImage(file='./ui/icon.png'))
tabview = CTkTabview(window)
tab_write=tabview.add("Write") # add tab at the end
tab_read=tabview.add("Read") # add tab at the end
tabview.set("Write") # set currently visible tab
def get_password():
fpassword=Password_entry.get()
return fpassword
def enter():
Pass_text.pack_forget()
Password_entry.pack_forget()
button.pack_forget()
get_password()
banan()
Password_entry=CTkEntry(window)
Pass_text=CTkLabel(window,text="Password: ")
button=CTkButton(window,text="Log in!", command=enter)
Pass_text.pack(fill="x", expand=True,padx=5,pady=5, side="top",anchor="n")
Password_entry.pack(fill="x", expand=True,padx=5,pady=5, side="top",anchor="n")
button.pack(fill="x", expand=True,padx=5,pady=5, side="top",anchor="n")
Names=["Website:","Login:","Password:","Create time:"]
def func(index):
inform=read_info_file(get_password())
tabview.pack_forget()
Site_label=CTkLabel(window,text=Names[0])
Site_val=CTkLabel(window)
Login_label=CTkLabel(window,text=Names[1])
Login_val=CTkLabel(window)
Password_label=CTkLabel(window,text=Names[2])
Password_val=CTkLabel(window)
def rewrite():
Site_val.grid_forget()
Login_val.grid_forget()
Password_val.grid_forget()
CopyLoginB.grid_forget()
CopyPassB.grid_forget()
QRShare.grid_forget()
Site_entry=CTkEntry(window)
Site_entry.insert(0, inform[index][0])
Login_entry=CTkEntry(window)
Login_entry.insert(0, inform[index][1])
Password_entry=CTkEntry(window)
Password_entry.insert(0, inform[index][2])
Site_entry.grid(row=0, column=1,padx=12,pady=10)
Login_entry.grid(row=1, column=1,padx=12,pady=10)
Password_entry.grid(row=2, column=1,padx=12,pady=10)
def save():
edit_info_file(index,Site_entry.get(),Login_entry.get(),Password_entry.get(),get_password())
readl()
DontEdit()
RewrireButton.configure(command=save,text="Save!")
ExitButton.grid_forget()
RewrireButton.grid_forget()
RewrireButton.grid(row=3, column=0,padx=12,pady=10)
def DontEdit():
Site_entry.grid_forget()
Login_entry.grid_forget()
Password_entry.grid_forget()
Site_label.grid_forget()
Login_label.grid_forget()
Password_label.grid_forget()
RewrireButton.grid_forget()
ExitButton.grid_forget()
func(index)
ExitButton.configure(command=DontEdit,text="Don`t save!")
ExitButton.grid_forget()
ExitButton.grid(row=3, column=1,padx=12,pady=10)
def Exit():
Site_label.grid_forget()
Site_val.grid_forget()
Login_label.grid_forget()
Login_val.grid_forget()
Password_label.grid_forget()
Password_val.grid_forget()
RewrireButton.grid_forget()
ExitButton.grid_forget()
ExitButton.grid_forget()
CopyLoginB.grid_forget()
CopyPassB.grid_forget()
QRShare.grid_forget()
tabview.pack(fill="both", expand=True,anchor='center')
ExitButton=CTkButton(window,command=Exit,text="Exit!")
Site_val.configure(text=inform[index][0])
Login_val.configure(text=inform[index][1])
Password_val.configure(text=inform[index][2])
Site_label.grid(row=0, column=0,padx=12,pady=10)
Site_val.grid(row=0, column=1,padx=12,pady=10)
Login_label.grid(row=1, column=0,padx=12,pady=10)
Login_val.grid(row=1, column=1,padx=12,pady=10)
Password_label.grid(row=2, column=0,padx=12,pady=10)
Password_val.grid(row=2, column=1,padx=12,pady=10)
RewrireButton=CTkButton(window,command=rewrite,text="🖊",width=10)
RewrireButton.grid(row=3, column=2,padx=12,pady=10)
ExitButton.grid(row=3, column=1,padx=12,pady=10)
def CopyLogin():
from pyperclip import copy
copy(inform[index][1])
CopyLoginB=CTkButton(window,command=CopyLogin,text="📋",width=10)
def CopyPass():
from pyperclip import copy
copy(inform[index][2])
def genadiy():
state=qr_image(inform[index][0],inform[index][1],inform[index][2],fg_color,bg_color)
from tkinter import Toplevel,Label
from PIL import ImageTk, Image
if state==True:
window = Toplevel()
window.geometry("200x200")
window.configure(bg=bg_color)
window.title("QR")
window.tk.call('wm', 'iconphoto', window._w, PhotoImage(file='qr.png'))
bg = ImageTk.PhotoImage(file="qr.png")
label = Label(window,background=bg_color,highlightbackground=bg_color)
label.pack(fill="both", expand=True,anchor='center')
counter_loop=[0]
def resize_image(win):
if counter_loop[0]%3==0:
image = Image.open("qr.png")
size=min(win.width,win.height)
resized = image.resize((size, size))
image2 = ImageTk.PhotoImage(resized)
window.image2=image2
label.configure(image=image2)
counter_loop.insert(0,counter_loop[0]+1)
window.bind("<Configure>", resize_image)
window.mainloop()
else:
window = Toplevel()
window.configure(bg=bg_color)
window.title("Warning!")
window.tk.call('wm', 'iconphoto', window._w, PhotoImage(file='./ui/warn.png'))
label = Label(window,background=bg_color,highlightbackground=bg_color,text="Too much data to make QR!",foreground=fg_color,font=("Monospace",16))
label.pack(fill="both", expand=True,anchor='center')
window.attributes('-topmost', True)
window.update()
window.mainloop()
CopyPassB=CTkButton(window,command=CopyPass,text="📋",width=10)
QRShare=CTkButton(window,command=genadiy,text="QR!")
CopyLoginB.grid(row=1, column=2,padx=12,pady=10)
CopyPassB.grid(row=2, column=2,padx=12,pady=10)
QRShare.grid(row=3, column=0,padx=12,pady=10)
scrollFrame = CTkScrollableFrame(master=tab_read)
scrollFrame.pack(fill="both",expand=True,padx=20, pady=20)
def readl():
try:
buttonEdit.grid_forget()
Infos_label.grid_forget()
title.grid_forget()
except:
for i in range(2):
Title=CTkLabel(scrollFrame,text=Names[i])
Title.grid(row=0, column=i,padx=12,pady=10)
inform=read_info_file(get_password())
for i in range(len(inform)):
buttonEdit=CTkButton(scrollFrame,text="",command=lambda x=i: func(x),width=12)
buttonEdit.grid(row=i+1, column=2,padx=12,pady=10)
for j in range(2):
Infos_label= CTkLabel(scrollFrame,text=inform[i][j])
Infos_label.grid(row=i+1, column=j,padx=12,pady=10)
def banan():
tabview.pack(fill="both", expand=True,anchor='center')
readl()
def write ():
write_to_file(Web_entry.get(),log_entry.get(),pas_entry.get(),get_password())
readl()
Site_label=CTkLabel(tab_write,text=Names[0])
Login_label=CTkLabel(tab_write,text=Names[1])
Password_label=CTkLabel(tab_write,text=Names[2])
Web_entry=CTkEntry(tab_write)
log_entry=CTkEntry(tab_write)
pas_entry=CTkEntry(tab_write)
SaveBut=CTkButton(tab_write,text="Save!", command=write)
Web_entry.grid(row=0, column=1,padx=12,pady=10)
log_entry.grid(row=1, column=1,padx=12,pady=10)
pas_entry.grid(row=2, column=1,padx=12,pady=10)
Site_label.grid(row=0, column=0,padx=12,pady=10)
Login_label.grid(row=1, column=0,padx=12,pady=10)
Password_label.grid(row=2, column=0,padx=12,pady=10)
SaveBut.grid(row=3, column=1,padx=12,pady=10)
def importFF():
paths=importEntry.get()
importcsv(paths,get_password())
readl()
importLabel.pack_forget()
importBD.pack_forget()
importEntry.pack_forget()
tabview.pack(fill="both", expand=True,anchor='center')
importB.pack(fill="x", expand=True,padx=5,pady=5, side="top",anchor="n")
ExportB.pack(fill="x", expand=True,padx=5,pady=5, side="top",anchor="n")
importEntry.delete(0, 'end')
importLabel=CTkLabel(window,text="Path:")
importEntry=CTkEntry(window)
def importDialog():
tabview.pack_forget()
importB.pack_forget()
ExportB.pack_forget()
importLabel.pack(fill="x", expand=True,padx=5,pady=5, side="top",anchor="n")
importEntry.pack(fill="x", expand=True,padx=5,pady=5, side="top",anchor="n")
importBD.pack(fill="x", expand=True,padx=5,pady=5, side="top",anchor="n")
def Export():
exportFF(get_password())
ExportB=CTkButton(tab_read,command=Export,text="Export!")
importB=CTkButton(tab_read,command=importDialog,text="Import!")
importBD=CTkButton(window,command=importFF,text="Import!")
importB.pack(fill="x", expand=True,padx=5,pady=5, side="top",anchor="n")
ExportB.pack(fill="x", expand=True,padx=5,pady=5, side="top",anchor="n")
window.mainloop()