Skip to content

Commit 03da0e5

Browse files
authored
Added Password Generator
added many functionality of how user is needing to add password like uppercase,lowercase,digit,alpanumeric,and generate and copy password
1 parent 58e07da commit 03da0e5

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed

RandomPasswordGenerator.py

+101
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
import tkinter as tk
2+
from tkinter import messagebox
3+
from tkinter import ttk
4+
import string
5+
import random
6+
import pyperclip
7+
8+
def generate_password():
9+
length = length_var.get()
10+
if length <= 0:
11+
messagebox.showerror("Error", "Please enter a valid password length.")
12+
return
13+
14+
character_set = ''
15+
if uppercase_var.get():
16+
character_set += string.ascii_uppercase
17+
if lowercase_var.get():
18+
character_set += string.ascii_lowercase
19+
if digits_var.get():
20+
character_set += string.digits
21+
if symbols_var.get():
22+
character_set += string.punctuation
23+
24+
if not character_set:
25+
messagebox.showerror("Error", "Please select at least one character set.")
26+
return
27+
28+
password = ''.join(random.choice(character_set) for _ in range(length))
29+
password_entry.delete(0, 'end')
30+
password_entry.insert('end', password)
31+
32+
def copy_password():
33+
password = password_entry.get()
34+
if password:
35+
pyperclip.copy(password)
36+
messagebox.showinfo("Password Copied", "Password copied to clipboard successfully!")
37+
else:
38+
messagebox.showwarning("No Password", "No password to copy!")
39+
40+
root = tk.Tk()
41+
root.title("Random Password Generator")
42+
root.geometry("500x500")
43+
root.configure(bg="#f0f0f0")
44+
45+
frame = tk.Frame(root, bg="#f0f0f0")
46+
frame.pack(expand=True, padx=20, pady=20)
47+
48+
length_label = tk.Label(frame, text="Password Length:", bg="#f0f0f0", font=("Helvetica", 12))
49+
length_label.grid(row=0, column=0, sticky="w", pady=5)
50+
51+
length_var = tk.IntVar()
52+
length_entry = tk.Entry(frame, textvariable=length_var, font=("Helvetica", 12))
53+
length_entry.grid(row=0, column=1, sticky="w", pady=5)
54+
55+
uppercase_var = tk.BooleanVar()
56+
uppercase_checkbox = tk.Checkbutton(frame, text="Uppercase", variable=uppercase_var, bg="#f0f0f0", font=("Helvetica", 10))
57+
uppercase_checkbox.grid(row=1, column=0, sticky="w", pady=2)
58+
59+
lowercase_var = tk.BooleanVar()
60+
lowercase_checkbox = tk.Checkbutton(frame, text="Lowercase", variable=lowercase_var, bg="#f0f0f0", font=("Helvetica", 10))
61+
lowercase_checkbox.grid(row=2, column=0, sticky="w", pady=2)
62+
63+
digits_var = tk.BooleanVar()
64+
digits_checkbox = tk.Checkbutton(frame, text="Digits", variable=digits_var, bg="#f0f0f0", font=("Helvetica", 10))
65+
digits_checkbox.grid(row=3, column=0, sticky="w", pady=2)
66+
67+
symbols_var = tk.BooleanVar()
68+
symbols_checkbox = tk.Checkbutton(frame, text="Symbols", variable=symbols_var, bg="#f0f0f0", font=("Helvetica", 10))
69+
symbols_checkbox.grid(row=4, column=0, sticky="w", pady=2)
70+
71+
generate_button = tk.Button(frame, text="Generate Password", command=generate_password, bg="#4CAF50", fg="white", font=("Helvetica", 12, "bold"))
72+
generate_button.grid(row=5, column=0, columnspan=2, pady=10)
73+
74+
password_entry = tk.Entry(frame, show="*", font=("Helvetica", 14), justify="center")
75+
password_entry.grid(row=6, column=0, columnspan=2, pady=10)
76+
77+
copy_button = tk.Button(frame, text="Copy Password", command=copy_password, bg="#008CBA", fg="white", font=("Helvetica", 12, "bold"))
78+
copy_button.grid(row=7, column=0, columnspan=2)
79+
80+
def on_enter(event):
81+
event.widget.config(bg="#5EBABA")
82+
83+
def on_leave(event):
84+
event.widget.config(bg="#008CBA" if event.widget == copy_button else "#4CAF50")
85+
86+
copy_button.bind("<Enter>", on_enter)
87+
copy_button.bind("<Leave>", on_leave)
88+
89+
generate_button.bind("<Enter>", on_enter)
90+
generate_button.bind("<Leave>", on_leave)
91+
92+
def pulsate_animation(widget):
93+
def animate():
94+
widget.config(bg="#5EBABA")
95+
widget.after(500, lambda: widget.config(bg="#4CAF50"))
96+
widget.after(1000, animate)
97+
animate()
98+
99+
pulsate_animation(generate_button)
100+
101+
root.mainloop()

0 commit comments

Comments
 (0)