代码解释
1.导入库
import tkinter as tk
from tkinter import ttk
import random
import string
import pyperclip
tkinter
:用于创建图形用户界面ttk
:tkinter
的子模块,用于更现代的控件样式random
:用于随机选择字符生成密码string
:提供生成密码所需的字符集合(字母、数字、符号)pyperclip
:用于将生成的密码复制到剪贴板
2.创建PasswordGenerator类
class PasswordGenerator:
def __init__(self, master):
self.master = master
master.title("密码生成器")
- 定义一个类
PasswordGenerator
,用来处理密码生成器的逻辑 __init__
方法初始化界面组件,并将它们添加到主窗口master
中
3.密码长度选择
self.length_label = ttk.Label(master, text="密码长度:")
self.length_var = tk.IntVar()
self.length_var.set(12)
self.length_scale = ttk.Scale(master, from_=8, to=32, orient=tk.HORIZONTAL, length=200, variable=self.length_var, command=self.update_length_label)
self.current_length_label = ttk.Label(master, text="12", width=3, anchor="center")
length_label
:显示“密码长度”的标签length_var
:保存当前密码长度的变量,默认值为12length_scale
:滑动条,允许用户选择密码长度(8到32个字符)current_length_label
:显示当前选择的密码长度
4.特殊字符选择
self.special_char_var = tk.BooleanVar()
self.special_char_var.set(True)
self.special_char_check = ttk.Checkbutton(master, text="包含特殊字符", variable=self.special_char_var)
special_char_var
:布尔变量,用于决定密码是否包含特殊字符,默认选中special_char_check
:复选框,用户可以通过它选择是否包含特殊字符
5.生成密码按钮
self.generate_button = ttk.Button(master, text="生成密码", command=self.generate_password)
generate_button
:按钮,点击后调用generate_password
方法生成密码
6.显示密码区域
self.password_var = tk.StringVar()
self.password_entry = ttk.Entry(master, textvariable=self.password_var, state='readonly', width=30)
password_var
:保存生成密码的字符串变量password_entry
:只读的文本框,显示生成的密码
7.复制密码按钮
self.copy_button = ttk.Button(master, text="复制密码", command=self.copy_password)
copy_button
:按钮,点击后调用copy_password
方法将密码复制到剪贴板。
8.方法:更新密码长度显示
def update_length_label(self, value):
self.current_length_label.config(text=str(int(float(value))))
update_length_label
:更新显示的密码长度,使其与滑动条一致
9.方法:生成密码
def generate_password(self):
length = self.length_var.get()
use_special = self.special_char_var.get()
lowercase = string.ascii_lowercase
uppercase = string.ascii_uppercase
digits = string.digits
symbols = string.punctuation if use_special else ''
password = [random.choice(lowercase), random.choice(uppercase), random.choice(digits)]
if use_special:
password.append(random.choice(symbols))
all_characters = lowercase + uppercase + digits + symbols
remaining_length = length - len(password)
password.extend(random.choice(all_characters) for _ in range(remaining_length))
random.shuffle(password)
password = ''.join(password)
self.password_var.set(password)
-
generate_password
:根据用户选择的参数生成随机密码,确保包含大写字母、小写字母和数字(如果选中,也包含特殊字符)。最终打乱密码顺序,并将其显示在界面上。
10.方法:复制密码
def copy_password(self):
password = self.password_var.get()
pyperclip.copy(password)
-
copy_password
:将生成的密码复制到剪贴板
11.主函数
def main():
root = tk.Tk()
password_generator = PasswordGenerator(root)
root.mainloop()
main
函数创建应用的主窗口并启动主事件循环,使应用保持运行状态
12.程序入口
if __name__ == "__main__":
main()
- 检查是否直接运行脚本,如果是,则调用
main
函数启动程序
全部代码
import tkinter as tk
from tkinter import ttk
import random
import string
import pyperclip
class PasswordGenerator:
def __init__(self, master):
self.master = master
master.title("密码生成器")
# 创建并放置密码长度滑动条
self.length_label = ttk.Label(master, text="密码长度:")
self.length_label.grid(row=0, column=0, padx=5, pady=5)
self.length_var = tk.IntVar()
self.length_var.set(12) # 默认密码长度为12
self.length_scale = ttk.Scale(master, from_=8, to=32, orient=tk.HORIZONTAL,
length=200, variable=self.length_var,
command=self.update_length_label)
self.length_scale.grid(row=0, column=1, padx=5, pady=5)
# 显示当前密码长度的标签,设置固定宽度
self.current_length_label = ttk.Label(master, text="12", width=3, anchor="center")
self.current_length_label.grid(row=0, column=2, padx=5, pady=5)
# 创建特殊字符选择框
self.special_char_var = tk.BooleanVar()
self.special_char_var.set(True) # 默认包含特殊字符
self.special_char_check = ttk.Checkbutton(master, text="包含特殊字符",
variable=self.special_char_var)
self.special_char_check.grid(row=1, column=0, columnspan=3, pady=5)
# 创建生成密码按钮
self.generate_button = ttk.Button(master, text="生成密码", command=self.generate_password)
self.generate_button.grid(row=2, column=0, columnspan=3, pady=10)
# 创建密码显示区域
self.password_var = tk.StringVar()
self.password_entry = ttk.Entry(master, textvariable=self.password_var, state='readonly', width=30)
self.password_entry.grid(row=3, column=0, columnspan=3, padx=5, pady=5)
# 创建复制按钮
self.copy_button = ttk.Button(master, text="复制密码", command=self.copy_password)
self.copy_button.grid(row=4, column=0, columnspan=3, pady=10)
def update_length_label(self, value):
# 更新显示当前密码长度的标签
self.current_length_label.config(text=str(int(float(value))))
def generate_password(self):
length = self.length_var.get()
use_special = self.special_char_var.get()
# 定义字符集
lowercase = string.ascii_lowercase
uppercase = string.ascii_uppercase
digits = string.digits
symbols = string.punctuation if use_special else ''
# 确保密码包含每种字符
password = [
random.choice(lowercase),
random.choice(uppercase),
random.choice(digits)
]
if use_special:
password.append(random.choice(symbols))
# 填充剩余长度
all_characters = lowercase + uppercase + digits + symbols
remaining_length = length - len(password)
password.extend(random.choice(all_characters) for _ in range(remaining_length))
# 打乱密码字符顺序
random.shuffle(password)
# 转换为字符串
password = ''.join(password)
self.password_var.set(password)
def copy_password(self):
password = self.password_var.get()
pyperclip.copy(password)
def main():
root = tk.Tk()
password_generator = PasswordGenerator(root)
root.mainloop()
if __name__ == "__main__":
main()
制作不易,点个关注再走吧