0

我正在尝试制作一个随机“密码”生成器,它将在 tkinter 条目小部件中显示随机字符串。问题是每次单击按钮时,它都会生成一个新的条目小部件,而不是更新当前小部件。我尝试移动和调整“entry = g.en(text=word)”字符串,但是当我这样做时,按钮单击不会在框中产生任何内容。我已经为此工作了一段时间,但我还没有提出解决方案。

import random
from swampy.Gui import *
from Tkinter import *
import string

#----------Defs----------
def genpass():
    word = ''
    for i in range(10):
        word += random.choice(string.ascii_letters + string.punctuation + string.digits)
    entry = g.en(text=word)

#----------Main----------
g = Gui()
g.title('Password Helper')
label = g.la(text="Welcome to Password Helper! \n \n Choose from the options below to continue. \n")

button = g.bu(text='Generate a New Password', command=genpass)

g.mainloop()
4

1 回答 1

0

既然你这样做了:

entry = g.en(text=word)

在函数内部,每次按下按钮时都会调用该函数,每次按下按钮都会获得一个新项目。

这样,gui等待按钮被按下以运行命令。

其次,我认为如果您从函数中删除条目创建,您将有更轻松的时间。相反,我建议您在调用函数之前定义条目,并让函数获取/更改值(为 GUI 设置类是一个很大的帮助)。这样您就不会总是在每次单击按钮时创建一个新的输入框。

尝试这个:

from Tkinter import *
import random

class MYGUI:
    def __init__(self):

        root=Tk()
        root.title('Password Helper')
        label = Label(root, text="Welcome to Password Helper! \n \n Choose from the options below to continue. \n")
        self.button=Button(root, text='Generate a New Password', command=lambda: self.genpass())
        self.word=Label(root)

        label.pack()
        self.button.pack()
        self.word.pack()
        mainloop()

    genpass(self):
        word = ''
        for i in range(10):
            word += random.choice(string.ascii_letters + string.punctuation + string.digits)
        self.word['text']=word

if __name__ == '__main__':
    MYGUI()
于 2014-04-17T00:56:04.063 回答