📜  Python|使用 Tkinter 的随机密码生成器(1)

📅  最后修改于: 2023-12-03 15:19:18.098000             🧑  作者: Mango

Python | 使用 Tkinter 的随机密码生成器

简介

本文介绍了如何使用 Python 的 Tkinter 库,创建一个简单的随机密码生成器。本程序可以生成包含各种大小写字母、数字和特殊字符的随机密码,并提供了一些简单的定制选项。使用本程序可以方便地生成安全的、随机的密码。

准备工作

在开始编写本程序之前,请确保已安装 Python,并具有基本的编程知识。此外,需要安装Tkinter库,由于在Python 3中,Tkinter库已默认安装,所以无需再次安装。

实现步骤
导入必要库

首先,我们需要导入一些 Python 标准库和 Tkinter 库中的需要的类。在本程序中,我们将使用 random 类来生成随机数,string 类来生成字符串,以及 TkLabelEntryButtonCheckbuttonScrollbar 类来创建 GUI 元素。

from random import choice
from string import ascii_letters, digits, punctuation
from tkinter import Tk, Label, Entry, Button, Checkbutton, BooleanVar, Scrollbar, VERTICAL, Text, END
定义密码生成函数

接下来定义生成随机密码的函数。该函数接受长度和密码构成要求的参数,并返回一个生成的密码。密码是由ASCII字母数字和标点符号构成的字符串。生成密码时,使用 randomstring 库来生成随机字符串。

def generate_password(length, uppercase, lowercase, numbers, punctuation):
    password = []
    if uppercase:
        password.extend([choice(ascii_letters.upper()) for _ in range(length//4)])
    if lowercase:
        password.extend([choice(ascii_letters.lower()) for _ in range(length//4)])
    if numbers:
        password.extend([choice(digits) for _ in range(length//4)])
    if punctuation:
        password.extend([choice(punctuation) for _ in range(length//4)])
    # Add more characters if the password is too short
    while len(password) < length:
        password.extend([choice(ascii_letters+digits+punctuation)])
    # Shuffle the password
    password = password[:length]
    password = ''.join(password)
    return password
定义 GUI 窗口

接下来,定义 GUI 窗口。GUI 窗口包含一个密码输入框、两个标签和一个生成密码的按钮。此外,还可以选择包含大写字母、小写字母、数字和标点符号。

class MainWindow:
    def __init__(self):
        # Initialize the main window
        self.window = Tk()
        self.window.title("Random Password Generator")

        # Add the text entry for password display
        self.password_entry = Text(self.window, width=30, height=10, wrap=WORD)
        self.password_entry.pack()

        # Add the length label and entry box
        self.length_label = Label(self.window, text="Password Length:")
        self.length_label.pack()
        self.length_entry = Entry(self.window, width=30)
        self.length_entry.pack()

        # Add the checkboxes for password contents
        self.uppercase_var = BooleanVar(self.window, value=True)
        self.uppercase_check = Checkbutton(self.window, text="Uppercase", variable=self.uppercase_var)
        self.uppercase_check.pack()
        self.lowercase_var = BooleanVar(self.window, value=True)
        self.lowercase_check = Checkbutton(self.window, text="Lowercase", variable=self.lowercase_var)
        self.lowercase_check.pack()
        self.numbers_var = BooleanVar(self.window, value=True)
        self.numbers_check = Checkbutton(self.window, text="Numbers", variable=self.numbers_var)
        self.numbers_check.pack()
        self.punctuation_var = BooleanVar(self.window, value=True)
        self.punctuation_check = Checkbutton(self.window, text="Punctuation", variable=self.punctuation_var)
        self.punctuation_check.pack()

        # Add the Generate button
        self.generate_button = Button(self.window, text="Generate Password", command=self.generate_password)
        self.generate_button.pack()

        # Add a scrollbar to the text entry for password display
        self.scrollbar = Scrollbar(self.window)
        self.password_entry.config(yscrollcommand=self.scrollbar.set)
        self.scrollbar.config(command=self.password_entry.yview)
        self.scrollbar.pack(side='right', fill='y')

    def generate_password(self):
        try:
            length = int(self.length_entry.get())
        except ValueError:
            self.password_entry.delete(1.0, END)
            self.password_entry.insert(END, "The 'Password Length' must be an integer.")
            return
        uppercase = self.uppercase_var.get()
        lowercase = self.lowercase_var.get()
        numbers = self.numbers_var.get()
        punctuation = self.punctuation_var.get()
        if not (uppercase or lowercase or numbers or punctuation):
            self.password_entry.delete(1.0, END)
            self.password_entry.insert(END, "At least one of the content checkboxes must be checked.")
            return
        password = generate_password(length, uppercase, lowercase, numbers, punctuation)
        self.password_entry.delete(1.0, END)
        self.password_entry.insert(END, password)
运行程序

最后,在主程序中初始化密码生成器并运行 GUI 窗口。

if __name__ == '__main__':
    mw = MainWindow()
    mw.window.mainloop()
总结

使用 Python 和 Tkinter 库可以方便地创建随机密码生成器。通过选择包含大写字母、小写字母、数字和标点符号等内容,可以自定义生成的密码。用户可以在 GUI 窗口中输入所需的密码长度,并在单击 “Generate Password” 按钮时生成密码。使用该程序,可以轻松地生成安全的、随机的密码。