随机密码生产器

python源码
import random
import re
import tkinter as tk

a = 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ!@#%&*()<>{}+?123456789'

def generate(n):  #n表示密码位
    s = 0
    ddtt = ""  # 初始化 ddtt 变量
    while s == 0:
        ddtt = []  # 创建一个空列表
        for i in range(n):  # 循环n次
            rand = random.randint(0, len(a)-1)  # 生成随机数
            ddtt.append(a[rand])  # 将随机数添加到列表中
        ddtt = "".join(ddtt)  # 将列表转换为字符串

        if re.search(r'[a-z]', ddtt):  # 判断字符串中是否包含小写字母
            if re.search(r'[A-Z]', ddtt):  # 判断字符串中是否包含大写字母
                if re.search(r'[0-9]', ddtt):  # 判断字符串中是否包含数字
                    if re.search(r'[!@#%&*()<>{}+?]', ddtt):  # 判断字符串中是否包含特殊字符
                        s = 1  # 满足条件,跳出循环
    return ddtt  # 返回生成字符串

def create_window():
    """创建一个带有两个文本框的简单GUI窗口"""
    # 创建主窗口
    window = tk.Tk()
    window.title("随机密码生成")

    # 设置窗口大小
    window.geometry("220x250")  # 宽x高 (像素)

    # 添加输入文本标签
    input_label = tk.Label(window, text="生成几位数:")
    input_label.pack(pady=5)  # 增加上下内边距

    # 创建输入文本框
    input_entry = tk.Entry(window)
    input_entry.insert(0, "8")
    input_entry.pack(pady=5)  # 增加上下内边距

    # 添加显示长度标签
    length_label = tk.Label(window, text="随机密码生成:")
    length_label.pack(pady=5)  # 增加上下内边距

    # 创建一个框架来放置显示长度文本框和复制按钮
    frame = tk.Frame(window)
    frame.pack(pady=5)

    # 创建显示长度文本框,初始值为空
    length_entry = tk.Entry(frame)
    length_entry.pack(pady=5)  # 增加上下内边距

    def copy_text():
        text_to_copy = length_entry.get()  # 获取要复制的文本内容
        window.clipboard_clear()  # 清空剪贴板内容
        window.clipboard_append(text_to_copy)  # 将文本内容添加到剪贴板

    # 创建一个按钮
    button_1 = tk.Button(frame, text="复制", command=copy_text)
    button_1.pack(pady=5)  # 增加上下内边距

    # 定义按钮点击事件的处理函数
    def update_length():
        input_text = input_entry.get()  # 获取输入文本
        num = generate(int(input_text))  # 调用generate函数
        length_entry.delete(0, tk.END)  # 清空长度文本框
        length_entry.insert(0, str(num))  # 将生成的密码插入到长度文本框中

    # 创建一个按钮
    button = tk.Button(window, text="更新密码", command=update_length)
    button.pack(pady=10)  # 增加上下内边距
    window.bind(lambda event: button.invoke())   # 绑定回车键触发按钮

    # 运行主事件循环
    window.mainloop()

if __name__ == "__main__":
    create_window()

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部