1

单击生成按钮后,此应用程序中的标签不会显示密码。我认为它可能来自“for”循环。任何帮助,将不胜感激。


from tkinter import *
from tkinter import ttk
import random
window = Tk()
window.resizable(False , False)
window.title('Password Generator')
window.geometry('400x200')

length = IntVar()
lbl = StringVar()
var1 = StringVar()

Alphabet = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM'
showpass = ttk.Label(window , textvariable = lbl).pack()

def randalp():

    for i in range(length):
        random.choice(Alphabet)

ttk.Label(window , text = 'Password Lentgh:').pack()
numchoosen = ttk.Combobox(window, width = 12 , textvariable = length)
numchoosen['values'] = (5,6,7,8,9,10)
numchoosen.pack()
numchoosen.current(2)
numchoosen.config(state = 'readonly')
rad1 = ttk.Checkbutton(window , text = 'Alphabet' , variable = var1).pack()

def btnclick():
    get1 = var1.get()
    if rad1 == '1':
            lbl.set(randalp)
            print(lbl)

btn = ttk.Button(window , text = 'Generate' , command = btnclick).pack()
window.mainloop()
4

1 回答 1

2

这是否为您解决了问题:

首先,您必须稍微更改一下您的randalp()功能:

def randalp():
    string = list(Alphabet)
    random.shuffle(string)
    return string[:5]

我使用shuffle它是因为它只是以随机顺序对列表进行洗牌,因此从该列表中获取前 5 个项目将是随机的。

还更改了 btnclick() 函数:

def btnclick():
    get1 = var1.get()
    if get1 == '1':
        lbl.set(randalp())

所以现在它使用返回值randalp()

此外,您应该修复您的代码的一些格式问题:建议:遵循 PEP 8,因为它使代码更易于阅读,并且不使用内置函数名称(如len)作为变量名称;这是非常糟糕的做法。

于 2021-04-25T08:43:27.787 回答