secret-notes

A "secret" note taking app written in Python with Tkinter.
git clone git://git.b1t.dev/secret-notes.git
Log | Files | Refs

#notes.py# (11079B)


      1 from email.mime import image
      2 import os
      3 import tkinter as tk
      4 from tkinter import messagebox
      5 class Notes:
      6     def __init__(self, master=None):
      7         self.master = master
      8         
      9     def register_user(self):
     10         username_info = self.username.get()
     11         password_info = self.password.get()
     12         
     13         try:
     14             os.makedirs(username_info)
     15             os.chdir(username_info)
     16             
     17             file = open(username_info, "w")
     18             file.write("Username:\n")
     19             file.write(username_info + "\n")
     20             file.write("Password:\n")
     21             file.write(password_info)
     22             file.close()
     23             
     24             # tk.Label(self.register_screen, text="Registration successful!", fg="#36BB00", font=("Lato", 12)).pack()
     25             # self.register_screen.config(text='Registration successful!')
     26             # self.register_screen.after(2000, lambda:self.register_screen.config(text=''))
     27             
     28             # login_tk.Button_check_test = tk.Label(self.register_screen, text="Registration successful!")
     29             # login_tk.Button_check_test.pack(fg="#36BB00", font=("Lato", 12))
     30             #self.register_screen.after(2000, self.register_screen.destroy)
     31             
     32         except FileExistsError:
     33             # tk.Label(self.register_screen, text="User Already Created", fg="#F18300", font=("Lato", 12)).pack()
     34             self.register_screen.config(text='User Already Created!')
     35             # self.register_screen.after(2000, lambda:self.register_screen.config(text=''))
     36             # TODO: Make this exception unnecessary maybe by creating the file instead of trying to chdir when its not found? 
     37         except FileNotFoundError:
     38             pass
     39             
     40         self.entry_username.delete(0,END)
     41         self.entry_password.delete(0,END)
     42 
     43     def save_file(self):
     44         create_notes = self.file_name.get()
     45         get_notes = create_notes.get()
     46         
     47         data = open(self.file_name, "w")
     48         data.write(get_notes)
     49         data.close()
     50         
     51         tk.Label(self.notes_screen, text="Text File Saved", fg="#36BB00", font=("Lato", 12)).pack()
     52 
     53     def login_completed(self):
     54         self.dashboard_screen = tk.Toplevel(self.master)
     55         self.dashboard_screen.title("Dashboard")
     56         self.dashboard_screen.geometry("350x250")
     57         
     58         welcome_user = self.user_verify.get()
     59         
     60         tk.Label(self.dashboard_screen, text="Welcome to the dashboard " + welcome_user + "!").pack() 
     61         tk.Button(self.dashboard_screen, text="Create secret note", command=self.create_secret_notes).pack()
     62         tk.Button(self.dashboard_screen, text="View secret note", command=self.view_notes).pack()
     63         tk.Button(self.dashboard_screen, text="Delete secret note", command=self.delete_notes).pack()
     64         
     65         self.dashboard_screen.protocol("WM_DELETE_WINDOW", self.close_gui_windows)
     66 
     67     # def close_gui_windows(self):
     68     #     if messagebox.askokcancel("Warning", "Do you want to exit dashboard?"):
     69             # TODO: When person signout of their account it needs to exit out of the folder (testing --> not the most thought out way)
     70             
     71     #         # self.dashboard_screen.destory()
     72             # TODO: Go back to the main directory folder. ("..") can be risky due to it being access to full location where the folder is located.
     73     #         os.chdir("./test/")   
     74 
     75     def delete_notes(self):
     76         self.register_screen0 = tk.Toplevel(self.master)
     77         self.register_screen0.title("Delete")
     78         self.register_screen0.geometry("350x250")
     79         
     80         list_files = os.listdir()
     81         
     82         tk.Label(self.register_screen0, text="Choose a filename to delete: ").pack()
     83         tk.Label(self.register_screen0, text=list_files).pack()
     84         
     85         self.delete_file = tk.StringVar()
     86         
     87         tk.Entry(self.register_screen0, textvariable=self.delete_file).pack()
     88         tk.Button(self.register_screen0, command=self.delete_notes_message, text="OK").pack()
     89 
     90 
     91     def delete_notes_message(self):
     92         delete = self.delete_file.get()
     93         os.remove(delete)
     94         
     95         self.register_screen1 = tk.Toplevel(self.master)
     96         self.register_screen1.title("Notes")
     97         self.register_screen1.geometry("350x250")
     98         
     99         tk.Label(self.register_screen1, text=delete+" has been removed").pack()
    100 
    101 
    102     def create_secret_notes(self):        
    103         self.file_name = tk.StringVar()
    104         create_notes = tk.StringVar()
    105         
    106         self.notes_screen = tk.Toplevel(self.master)
    107         self.notes_screen.title("Make Notes")
    108         self.notes_screen.geometry("350x250")
    109         
    110         tk.Label(self.notes_screen, text="Enter a filename: ").pack()
    111         tk.Entry(self.notes_screen, textvariable=self.file_name).pack()
    112         tk.Label(self.notes_screen, text="Enter secret notes: ").pack()
    113         tk.Entry(self.notes_screen, textvariable=create_notes).pack()
    114         tk.Button(self.notes_screen, text="Save", command=self.save_file).pack()
    115 
    116     def choose_files(self):
    117         open_file_screen = tk.Toplevel(self.master)
    118         open_file_screen.title("Info")
    119         open_file_screen.geometry("350x250")
    120         
    121         list_files = os.listdir()
    122         
    123         tk.Label(open_file_screen, text="Choose a filename below: ").pack()
    124         tk.Label(open_file_screen, text=list_files).pack()
    125         
    126         self.file_name = tk.StringVar()
    127         
    128         tk.Entry(open_file_screen, textvariable=self.file_name).pack()
    129         tk.Button(open_file_screen, command=self.view_notes, text="OK").pack()
    130         
    131     def view_notes(self):    
    132         read_file_screen = tk.Toplevel(self.master)
    133         read_file_screen.title("Notes")
    134         read_file_screen.geometry("350x250")    
    135         
    136         read_notes = open(self.file_name.get(), "r")
    137         data = read_notes.read()
    138         
    139         tk.Label(read_file_screen, text=data).pack()
    140 
    141     def login_verify(self):
    142         get_username = self.user_verify.get()
    143         get_password = self.pass_verify.get()
    144 
    145         list_of_files = os.listdir("./test/")
    146         if get_username in list_of_files:
    147             self.file_name = str(get_username)
    148             
    149             # TODO: Remove after debugging is finished. 
    150             print("System: Debug file name " + self.file_name)
    151             
    152             # TODO: Files not saving in test.
    153             os.chdir("./test/" + self.file_name)
    154             
    155             file_open = open(get_username, "r")
    156             verify = file_open.read().splitlines()
    157             if get_password in verify:
    158                 self.login_completed()
    159             else:
    160                 tk.Label(self.login_screen, text="Password Error!", fg="#E81500", font=("Lato", 12)).pack()
    161         else:
    162             tk.Label(self.login_screen, text="User not found!", fg="#E81500", font=("Lato", 12)).pack()
    163 
    164 
    165     def login_page(self):
    166         self.login_screen = tk.Toplevel(self.master)
    167         self.login_screen.title("Login")
    168         self.login_screen.geometry("350x250")
    169         self.login_screen.resizable(0,0)
    170 
    171         tk.Label(self.login_screen, text="Enter your login details").pack()
    172         tk.Label(self.login_screen, text="").pack()
    173         
    174         self.user_verify = tk.StringVar()
    175         self.pass_verify = tk.StringVar()
    176 
    177         tk.Label(self.login_screen, text="Username").pack()
    178         self.entry_username1 = tk.Entry(self.login_screen, textvariable=self.user_verify)
    179         self.entry_username1.pack()
    180         
    181         tk.Label(self.login_screen, text="Password").pack()
    182         self.entry_password1 = tk.Entry(self.login_screen, textvariable=self.pass_verify)
    183         self.entry_password1.pack()
    184         
    185         tk.Label(self.login_screen, text="").pack()
    186         self.entry_password1.config(show="*")
    187         
    188         eye_icon_on = tk.PhotoImage(file="./assets/images/view.png")
    189         eye_icon_off = tk.PhotoImage(file="./assets/images/invisible.png")
    190         
    191         # TODO: Change up the Buttons  to have eyes instead of a bar. Located .
    192         tk.Button(self.login_screen, relief=tk.FLAT, image=eye_icon_on, height="25", width="25", command=lambda: self.password_show("show_login_password")).pack()
    193         tk.Button(self.login_screen, image=eye_icon_off, height="1", width="10", command=lambda: self.password_show("hide_login_password")).pack()
    194         
    195         tk.Button(self.login_screen, text="Login", height="1", width="10", command=self.login_verify).pack()
    196 
    197     def password_show(self, button_click):
    198         if button_click == "show_login_password":
    199             self.entry_password1.config(show="") 
    200         elif button_click == "hide_login_password":
    201             self.entry_password1.config(show="*")
    202         elif button_click == "show_register_password":
    203             self.entry_password.config(show="") 
    204         else:
    205             self.entry_password.config(show="*")
    206             
    207     def register_page(self):
    208         self.register_screen = tk.Toplevel(self.master)
    209         self.register_screen.title("Register")
    210         self.register_screen.geometry("350x250")
    211         self.register_screen.resizable(0,0)
    212 
    213         self.username = tk.StringVar()
    214         self.password = tk.StringVar()
    215         
    216         tk.Label(self.register_screen, text="Enter your details").pack()
    217         tk.Label(self.register_screen, text="").pack()
    218         
    219         tk.Label(self.register_screen, text="Username").pack()
    220         self.entry_username = tk.Entry(self.register_screen, textvariable=self.username)
    221         self.entry_username.pack()
    222         
    223         tk.Label(self.register_screen, text="Password").pack()
    224         self.entry_password = tk.Entry(self.register_screen, textvariable=self.password)
    225         self.entry_password.pack()
    226         
    227         tk.Label(self.register_screen, text="").pack() 
    228         self.entry_password.config(show="*")
    229 
    230         # TODO: Change the Buttons to eye icons.
    231         tk.Button(self.register_screen, text="Show password!", height="1", width="12", command=lambda: self.password_show("show_register_password")).pack()
    232         tk.Button(self.register_screen, text="Hide password!", height="1", width="12", command=lambda: self.password_show("hide_register_password")).pack()
    233         tk.Button(self.register_screen, text="Register", height="1", width="10", command=self.register_user).pack()
    234 
    235         
    236     def screen(self):        
    237         self.master.geometry("350x250")
    238         self.master.title("Secret Notes")
    239         self.master.iconphoto(True, tk.PhotoImage(file="./assets/images/favicon.png"))
    240         self.master.resizable(0,0)    
    241         
    242         tk.Label(text="Secret Notes", bg="#4BA400", fg="#FFFFFF", width="300", height="2", font=("Lato", 14)).pack()
    243         tk.Label(text="").pack()
    244         tk.Button(text="Login", height="1", width="25", font=("Lato", 12), command=self.login_page).pack()
    245         tk.Label(text="").pack()
    246         tk.Button(text="Register", height="1", width="25", font=("Lato", 12), command=self.register_page).pack()
    247         
    248         self.master.mainloop()
    249             
    250             
    251 if __name__ == '__main__':
    252     master = tk.Tk()
    253     note = Notes(master)
    254     note.screen()