随机密码项目 Python

Random passwords Project Python

所以我试图构建一个包含随机密码的项目。只剩下两件事了。我希望再次单击该按钮时将密码替换为新密码。 然后我希望密码位于 window 而不是终端中。 如果有人能告诉我完成该项目需要哪些功能,我不介意您是否还有关于该项目的任何其他说明。

我会把代码放在下面。 ⬇

 from tkinter import *
import random
import string

# recourses&def
string.digits
string.ascii_letters
abc = random.choice(string.ascii_letters)
num = random.choice(string.digits)
pun = random.choice(string.punctuation)
abc2 = random.choice(string.ascii_letters)
num2 = random.choice(string.digits)
pun2 = random.choice(string.punctuation)
abc3 = random.choice(string.ascii_letters)
num3 = random.choice(string.digits)
pun3 = random.choice(string.punctuation)
abc4 = random.choice(string.ascii_letters)
num4 = random.choice(string.digits)
pun4 = random.choice(string.punctuation)

password = abc+num+pun+abc2+"  "+num2+pun2+abc3+num3+"  "+pun3+abc4+num4+pun4


def myclick():
    print(password)


# window
window = Tk()
window.title("Random Passwords")


# the label
label = Label(window, text=" Welcome To Random Passwords")
label.config(font=("Ink Free", 50, "bold"))
label.config(fg="#fc0331")
label.config(bg="#03fce7")
label.pack()



# button
theButton = Button(window, text="Click here!",
                   padx=20, pady=5, command=myclick)
theButton.pack()

# mainloop
window.mainloop()

忽略逻辑和代码布局,这是一个简单的答案。

  • 首先在 myclick()

    之前声明您的 window 变量
  • 第二次在 myclick() 中打包一个新标签,字符串参数为“text=password”

     # window
     window = Tk()
     window.title("Random Passwords")
    
     def myclick():
         print(password)
         passLabel = Label(window, text=password)
         passLabel.config(font=("Ink Free", 50, "bold"))
         passLabel.config(fg="#fc0331")
         passLabel.config(bg="#03fce7")
         passLabel.pack()
    

首先,我想说你的随机生成东西的代码非常有限(顺序总是一样的)。尝试将其放入函数中。制作一个包含有效字符的字符串。

def genPassword(count):
    out = '' #output password
    charsAvailable = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz1234567890!@#$%^&'
    for s in range(count):
        out += charsAvailable[random.randint(0, len(charsAvailable)-1) #grabs a random character from the string and adds it to the password
    return out

上面的代码并不局限于某种模式。

现在要显示密码,您想在最初为空的按钮下方放置一个标签:

passwordDisplay = Label(window, text="") 并打包:passwordDisplay.pack().

之后,在 myClick 函数中,执行以下操作:

passwordDisplay.config(text=genPassword(30))。每当点击按钮时,它应该生成一个 30 个字符长的密码,并显示它。

我对您的代码所做的更改: 我用 create_password 函数替换了 myclick 函数。然后,在 create_password 中,我创建了一个名为 my_tuple 的元组,其中包含密码字符的所有要求。我还创建了一个名为 my_list 的空列表。之后,我遍历 my_tuple,从元组中的每个要求中生成一个随机字符,并将每个字符附加到 my_list。然后,我将 my_list 转换为名为 password 的字符串,并将我创建的新标签的文本设置为 password。该标签显示在名为 window2 的小 Toplevel widget/window 上。修改代码:

from tkinter import *
import random
import string

# window
window = Tk()
window.title("Random Passwords")
password = ""

def create_password():
    global password
    my_tuple = (string.ascii_letters, string.digits, string.punctuation, string.ascii_letters, string.digits,
                string.punctuation, string.ascii_letters, string.digits, string.punctuation, string.ascii_letters,
                string.digits, string.punctuation)

    my_list = []

    for i in my_tuple:
        my_list.append(random.choice(i))


    password = "".join(my_list)
    label2.config(text=password)


# window that displays the generated password
window2 = Toplevel(window)
window2.title("Password")
window2.geometry("20x20+450+300")

# the label
label = Label(window, text=" Welcome To Random Passwords", font=("Ink Free", 50, "bold"), fg="#fc0331", bg="#03fce7")
label.pack()
label2 = Label(window2, text="")
label2.pack()



# button
theButton = Button(window, text="Click here!",
                   padx=20, pady=5, command=create_password)
theButton.pack()

# mainloop
window.mainloop()

生成特定长度的随机字符串的最佳方法是

import string
import random
def genPass(len_):#here at len argument, it should be the len of password
    printable = string.printable
    pas = ""
    for i in range(len_):
        pas+=random.choice(printable)
    return pas

然后再制作一个标签并在您的 myfuc 函数中

def myfunc(pas):
    label_name.config(text=pas)

然后创建一个 lambda myfu = lambda:myfunc(getPass(10)) 并将 myfu 变量作为按钮的命令传递。是的,而不是 getPass(10) 你可以用你想要的任何数字替换 10 甚至询问是否来自用户本身