以前没有用keepass的时候,每次的密码都要自己去随机按键盘,后来有了keepass就方便了,但最近还是想自己搞一个简单的密码生成器试试:# 有界面,可以复制密码,每次必须包含大写、小写、数字和符号,默认密码长度12位
import tkinter as tk
import random
import string
import pyperclip
DEFAULT_PASSWORD_LENGTH = 12
def generate_password():
try:
password_length = int(length_entry.get())
except ValueError:
password_length = DEFAULT_PASSWORD_LENGTH
if password_length <= 0:
password_length = DEFAULT_PASSWORD_LENGTH
# 定义包含大写字母、小写字母、数字和符号的字符集合
characters = string.ascii_uppercase + string.ascii_lowercase + string.digits + string.punctuation
# 确保至少包含一个大写字母、一个小写字母、一个数字和一个符号
password = random.choice(string.ascii_uppercase) + \
random.choice(string.ascii_lowercase) + \
random.choice(string.digits) + \
random.choice(string.punctuation) + \
''.join(random.choice(characters) for _ in range(password_length - 4))
# 将密码字符串转换为列表并进行乱序
password_list = list(password)
random.shuffle(password_list)
password = ''.join(password_list)
password_var.set(password)
def copy_password():
pyperclip.copy(password_var.get())
# 创建主窗口
root = tk.Tk()
root.title("密码生成器")
# 创建控件
length_label = tk.Label(root, text="密码长度:")
length_label.grid(row=0, column=0, padx=5, pady=5)
default_length = tk.StringVar(value="默认" + str(DEFAULT_PASSWORD_LENGTH) + "位")
length_entry = tk.Entry(root, textvariable=default_length)
length_entry.grid(row=0, column=1, padx=5, pady=5)
length_entry.config(fg='grey')
def on_entry_click(event):
if length_entry.get() == "默认" + str(DEFAULT_PASSWORD_LENGTH) + "位":
length_entry.delete(0, "end")
length_entry.insert(0, "")
length_entry.config(fg='black')
def on_focus_out(event):
if length_entry.get() == "":
length_entry.insert(0, "默认" + str(DEFAULT_PASSWORD_LENGTH) + "位")
length_entry.config(fg='grey')
length_entry.bind('<FocusIn>', on_entry_click)
length_entry.bind('<FocusOut>', on_focus_out)
generate_button = tk.Button(root, text="生成密码", command=generate_password)
generate_button.grid(row=1, column=0, columnspan=2, padx=5, pady=5, sticky="we")
password_var = tk.StringVar()
password_label = tk.Label(root, textvariable=password_var, wraplength=300)
password_label.grid(row=2, column=0, columnspan=2, padx=5, pady=5)
copy_button = tk.Button(root, text="复制密码", command=copy_password)
copy_button.grid(row=3, column=0, columnspan=2, padx=5, pady=5, sticky="we")
# 运行主循环
root.mainloop()