import mysql.connector from customtkinter import * class DatabaseMediator: """Handles the connection and interaction with the MySQL database.""" def __init__(self, host, user, password, database, table_name,*columns): """ Initializes the DatabaseMediator object. Args: host (str): The MySQL server host. user (str): The username for the database connection. password (str): The password for the database connection. database (str): The name of the database. table_name (str): The name of the table storing the passwords. *columns (str): Variable-length argument list of column names in the table. """ self.host = host self.user = user self.password = password self.database = database self.table_name = table_name self.columns = columns self.mydb = mysql.connector.connect( host=self.host, user=self.user, password=self.password, database=self.database ) self.mycursor = self.mydb.cursor() def insert_data(self, *args): """ Inserts data into the MySQL table. Args: *args: Variable-length argument list of values to be inserted. """ self.mycursor.execute(f"INSERT INTO {self.table_name} ({', '.join(list(self.columns))}) VALUES {args}") self.mydb.commit() def retrieve_data(self): """ Retrieves all data from the MySQL table. Returns: list: A list of tuples representing the retrieved data. """ self.mycursor.execute(f"SELECT * FROM {self.table_name}") myresult = self.mycursor.fetchall() return myresult class PasswordManager(CTk): """The main GUI class for the Password Manager application.""" def __init__(self): """Initializes the PasswordManager GUI.""" super().__init__() self.title("Password Manager") #change the host, username, and password to yours self.database_connection = DatabaseMediator("HOST", "USERNAME", "PASSWORD", "password_manager", "passwords", "account_name", "account_id", "account_password") self.frame = CTkFrame(self) self.frame.grid(row=0, columnspan=2, padx=10, pady=10) self.account_name = CTkEntry(self.frame, placeholder_text="Account name") self.account_name.pack(padx=10, pady=10) self.account_id = CTkEntry(self.frame, placeholder_text="Enter your user ID here") self.account_id.pack(padx=10, pady=10) self.account_password = CTkEntry(self.frame, placeholder_text="Enter your Password") self.account_password.pack(padx=10, pady=10) self.save_password = CTkButton(self, text="Save Password", command=self.save) self.save_password.grid(row=1, column=0, padx=10, pady=10) self.view_password = CTkButton(self, text="View Passwords", command=self.view) self.view_password.grid(row=1, column=1, padx=10, pady=10) def save(self): """Saves the password to the database.""" acc_nm = self.account_name.get() acc_id = self.account_id.get() acc_password = self.account_password.get() self.database_connection.insert_data(acc_nm, acc_id, acc_password) label = CTkLabel(self, text="Passwords Saved successfully...") label.grid(row=2, columnspan=2, padx=10, pady=10) def view(self): """Retrieves and displays all passwords from the database.""" passwords = self.database_connection.retrieve_data() result = "" for i in range(len(passwords)): result += f"\n{i+1}. {passwords[i]}" result_frame = CTkFrame(self) result_frame.grid(row=3, columnspan=2, padx=10, pady=10) res_label = CTkLabel(result_frame, text=result) res_label.pack() app = PasswordManager() app.mainloop()