随机生成的文本不会在条目小部件中更新

时间:2014-04-17 00:21:24

标签: python tkinter widget tkinter-entry

我正在尝试随机输入密码"生成器,它将在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()

1 个答案:

答案 0 :(得分: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()