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