【问题标题】:GUI for a random password generator随机密码生成器的 GUI
【发布时间】:2023-01-12 20:18:04
【问题描述】:

我正在学习使用 tkinter 和 ttk,所以我尝试为随机密码生成器制作一个 GUI,这是我目前的代码:

import random
from tkinter import *
from tkinter import ttk


win = Tk()

win.geometry("300x250")
win.title('random pass generator')


global password_length
password_length = int()


enter_length = ttk.Entry(win , textvariable = password_length)
enter_length.pack()

global password
password = StringVar()


def generate_password(password_length):
    i = 0
    characters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
    while i < password_length:
        password = password + random.choice(characters)
        i = i + 1

generate = ttk.Button(win,text = 'generate',command = generate_password(password_length))
generate.pack()

label = ttk.Label(win,textvariable = password)
label.config(background = 'black')
label.pack()

win.mainloop()

问题是在我输入密码长度并单击按钮后,它没有给我密码。

我试图将密码分配给标签以将其显示在屏幕上,但在我单击按钮后它没有显示。

【问题讨论】:

标签: python tkinter


【解决方案1】:

因为你有 password 作为 StringVar,你需要使用 set 方法给它赋值,例如:

password.set(password.get() + random.choice(characters))

而不是:

password = password + random.choice(characters)

此外,commandButton 的参数只能接受函数句柄而不是对函数的调用,即,您只能传递 command=generate_password 而不能传递 command=generate_password(password_length)。您可以将 password_length 设为全局而不是函数的参数,将其硬编码到函数中,或者使用 lambda 函数(参见 here),例如:

generate = ttk.Button(
    win,
    text='generate',
    command=lambda: generate_password(password_length)
)

最后,如果使用上面的 lambda 选项,您还应该更改:

password_length = int()
enter_length = ttk.Entry(win , textvariable = password_length)

password_length = StringVar()
enter_length = ttk.Entry(win, textvariable=password_length)

因为 textvariable 应该使用 StringVar 而不是 int。然后在generate_password 内,有:

while i < int(password_length.get()):

【讨论】:

  • 您可能还想指出this 问题。
猜你喜欢
  • 2012-11-06
  • 2014-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
相关资源
最近更新 更多