因此,我正在制作一个随机的名称生成器。一切都在我的GUI中完成。问题是我只能按一次“生成”按钮来获取所有需要的值。如何无限次按下按钮,每次按下按钮都会获得不同的值。
我是否需要进行某种循环?我放在lambda
里面。这会阻止刚打开GUI时在我的屏幕上显示的值。这样,您可以按按钮,文本将像正常情况一样显示。
firstnameli = ['Chris ', 'Kevin ', 'Jeff ', 'Marty ', 'Dolen ']
lastnameli = ['Smith', 'Miller', 'Jones', 'Davis', 'Brown']
full_name = random.choice(firstnameli) + random.choice(lastnameli)
#this allows text to be put in the text box
estr = StringVar()
estr.set(full_name)
fullnameentry = Entry(MyWin, borderwidth=5, font=("Helvetica", 15))
def buttonfunc():
fullnameentry.config(text=estr)
genbutton = Button(MyWin, text="GENERATE", activebackground="blue", command= lambda: buttonfunc())
您只生成一次随机名称。从那时起,estr
将始终是相同的值。
如果您感到满意,lambda
可以使用它来实现full_name
一个功能:
full_name = lambda: random.choice(firstnameli) + random.choice(lastnameli)
然后,您将不得不调用 full_name
它,因为它不再是一个简单的字符串变量,而是一个函数:
estr.set(full_name())
此外,你似乎错过设置textvariable=estr
的fullnameentry
。
一切放在一起:
firstnameli = ['Chris ', 'Kevin ', 'Jeff ', 'Marty ', 'Dolen ']
lastnameli = ['Smith', 'Miller', 'Jones', 'Davis', 'Brown']
full_name = lambda: random.choice(firstnameli) + random.choice(lastnameli)
#this allows text to be put in the text box
estr = StringVar()
estr.set(full_name())
fullnameentry = Entry(MyWin, textvariable=estr, borderwidth=5, font=("Helvetica", 15))
def buttonfunc():
estr.set(full_name())
genbutton = Button(MyWin, text="GENERATE", activebackground="blue", command=buttonfunc)
我还认为您的代码在某些方面可能有点太复杂。这是一个最小而完整的tkinter
示例,也许这会在某种程度上为您提供帮助:
import tkinter as tk
import random
def random_name():
first_names = ['Chris', 'Kevin', 'Jeff', 'Marty', 'Dolen']
last_names = ['Smith', 'Miller', 'Jones', 'Davis', 'Brown']
full_name = '{} {}'.format(random.choice(first_names), random.choice(last_names))
return full_name
def update_label_and_entry():
new_random_name = random_name()
label.config(text=new_random_name)
entry.delete(0, tk.END) # delete content from 0 to end
entry.insert(0, new_random_name) # insert new_random_name at position 0
root = tk.Tk()
label = tk.Label(root)
label.pack()
entry = tk.Entry(root)
entry.pack()
button = tk.Button(root, text="New random name", command=update_label_and_entry)
button.pack()
root.mainloop()
当然,这段代码并不完美。该代码可进一步例如通过移动来改善first_names
和last_names
到全局命名空间,因此其它方法可以访问的值,太。另外,您可以为窗口或包含该update_label
方法的标签编写一个类。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句