Axlvpsg Python GUI

👤 Sharing: AI
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import random
import string

def generate_password(length, use_uppercase, use_lowercase, use_digits, use_symbols):
    characters = ''
    if use_uppercase:
        characters += string.ascii_uppercase
    if use_lowercase:
        characters += string.ascii_lowercase
    if use_digits:
        characters += string.digits
    if use_symbols:
        characters += string.punctuation

    if not characters:
        messagebox.showerror("Error", "Please select at least one character set.")
        return None

    password = ''.join(random.choice(characters) for _ in range(length))
    return password


def show_details():
    details_window = tk.Toplevel(root)
    details_window.title("Program Details")
    details_text = tk.Text(details_window, wrap=tk.WORD)
    details_text.insert(tk.END, "This is a password generator program.  It allows users to create strong, random passwords based on their specified criteria (length, uppercase, lowercase, digits, symbols).  The GUI allows easy configuration of these options. It's designed to be a simple and user-friendly alternative to online password generators and a practical tool for enhancing online security.")
    details_text.config(state=tk.DISABLED)  # Make it read-only
    details_text.pack(padx=10, pady=10)

def generate_password_button_click():
    try:
        length = int(length_entry.get())
        if length <= 0:
            messagebox.showerror("Error", "Password length must be greater than 0.")
            return

        uppercase = uppercase_var.get()
        lowercase = lowercase_var.get()
        digits = digits_var.get()
        symbols = symbols_var.get()

        password = generate_password(length, uppercase, lowercase, digits, symbols)
        if password:
            password_output.delete(0, tk.END)
            password_output.insert(0, password)

    except ValueError:
        messagebox.showerror("Error", "Invalid password length. Please enter a number.")


root = tk.Tk()
root.title("Password Generator")

# Length Input
length_label = ttk.Label(root, text="Password Length:")
length_label.grid(row=0, column=0, padx=5, pady=5, sticky=tk.W)
length_entry = ttk.Entry(root)
length_entry.grid(row=0, column=1, padx=5, pady=5, sticky=tk.E)
length_entry.insert(0, "12") # Default length

# Checkboxes
uppercase_var = tk.BooleanVar(value=True)
uppercase_check = ttk.Checkbutton(root, text="Uppercase", variable=uppercase_var)
uppercase_check.grid(row=1, column=0, padx=5, pady=5, sticky=tk.W)

lowercase_var = tk.BooleanVar(value=True)
lowercase_check = ttk.Checkbutton(root, text="Lowercase", variable=lowercase_var)
lowercase_check.grid(row=1, column=1, padx=5, pady=5, sticky=tk.W)

digits_var = tk.BooleanVar(value=True)
digits_check = ttk.Checkbutton(root, text="Digits", variable=digits_var)
digits_check.grid(row=2, column=0, padx=5, pady=5, sticky=tk.W)

symbols_var = tk.BooleanVar(value=False)
symbols_check = ttk.Checkbutton(root, text="Symbols", variable=symbols_var)
symbols_check.grid(row=2, column=1, padx=5, pady=5, sticky=tk.W)

# Generate Button
generate_button = ttk.Button(root, text="Generate Password", command=generate_password_button_click)
generate_button.grid(row=3, column=0, columnspan=2, padx=5, pady=5)

# Password Output
password_label = ttk.Label(root, text="Generated Password:")
password_label.grid(row=4, column=0, padx=5, pady=5, sticky=tk.W)
password_output = ttk.Entry(root, width=30)
password_output.grid(row=4, column=1, padx=5, pady=5, sticky=tk.E)

# Details Button
details_button = ttk.Button(root, text="Details", command=show_details)
details_button.grid(row=5, column=0, columnspan=2, padx=5, pady=5)

root.mainloop()
👁️ Viewed: 9

Comments