我刚开始学习如何使用互联网上的教程等编写Python程序。我目前正在尝试构建一个程序,用户可以在输入框中输入多个名称,然后随机选择其中一个名称。
我设法使用命令行执行此操作,但在将其构建为GUI时,我正在努力使其工作。对于我使用的命令行代码:
import random
import time
print ("Hello!")
userInput = input ('Please enter the names:')
time.sleep (5)
userInput = str(userInput).split ()
name = random.choice (userInput)
print ("Its",name)
我想知道如何创建相同的程序,但在GUI中运行它。我到目前为止的代码是:
import random
import time
from tkinter import *
root = Tk()
def input():
time.sleep (5)
mytext=userInput.get()
label2 = Label(root,text=mytext).pack()
userInput = StringVar()
root.geometry("500x500")
root.title("Tkinter GUI")
Label1 = Label(root,text="Welcome to my program").pack()
entry = Entry(root,textvariable=userInput).pack()
Button1 = Button(root,text="Go",command=input).pack()
root.mainloop()
对于我的基于GUI的代码,我可以输入一些名称等,但我不知道如何随机选择一个。我还可以使用.split()
& random.choice
根据我的基于文本的代码?在我的GUI代码中我需要输入这个?我尝试过几个不同的地方但却无法让它发挥作用。我认为这应该是相当容易做的事情?任何帮助将不胜感激。
由于
答案 0 :(得分:0)
command
窗口小部件的Button
附加到回调函数,在这种情况下,此函数称为input()
。输入对于此函数来说不是一个很好的名称,因为它已经作为内置函数存在,并且您不想重新定义它的作用。另请注意,您应该从回调中删除time.sleep(),因为time.sleep()与GUI冲突并在进程流处于睡眠状态时禁用对它的更新。
在回调函数中,您可以像以前一样处理输入,然后将其返回到您想要的GUI。
示例:
from tkinter import *
import random
def callback():
nameList = userInput.get().split()
name = random.choice(nameList)
Label(root, text=name).pack()
root = Tk()
userInput = StringVar()
ent = Entry(root, textvariable=userInput)
ent.pack()
btn = Button(root, text="Go", command=callback)
btn.pack()
root.mainloop()
Tkinter上有大量的文档和示例。从这里开始:http://effbot.org/tkinterbook/tkinter-index.htm