我是一名 Python 初学者,决定使用 tkinter 制作一个小型 GUI,该 GUI 接受用户(潜在餐馆)的 3 个输入,然后单击按钮后随机输出其中一家餐馆。我不断收到语法错误,并认为它与我的 buttonfunc 或调用它的命令有关。此代码尚未包含在 GUI 上输出餐厅的任何位置。任何帮助将不胜感激
# Python Project Random Selector
import random
import tkinter as tk
root = tk.Tk()
def buttonfunc():
all_rest = [entrystr1.get(), entrystr2.get(), entrystr3.get()]
randomrest = random.choice(all_rest)
print(randomrest)
root.geometry("800x500")
root.title("Random Choice GUI")
label = tk.Label(root, text="Enter 3 of your favourite restaurants and seperate them by a comma (,): ", font=('Arial',16))
label.pack(padx=20, pady=20)
entrystr1 = tk.StringVar(value = 'type the first restaurant name here')
choice1 = tk.Entry(root, textvariable = entrystr1)
choice1.pack()
entrystr2 = tk.StringVar(value = 'type the second restaurant name here')
choice2 = tk.Entry(root, textvariable = entrystr2)
choice2.pack()
entrystr3 = tk.StringVar(value = 'type the third restaurant name here')
choice3 = tk.Entry(root, textvariable = entrystr3)
choice3.pack()
enterbtn = tk.Button(root, text="Enter", command=lambda: buttonfunc, font=('Arial',14) )
enterbtn.pack()
root.mainloop()
我多次尝试更改我的buttonfunc中的变量,但是,这是行不通的。我还尝试将代码减少到只有一个输入框,以查看重复代码是否有问题。那也行不通。
的代码中存在一个小的语法错误,即
command
参数中
lambda
函数的使用。虽然打算让
lambda
调用
buttonfunc
,但并没有正确地执行。应该将
buttonfunc
作为函数传递给
command
,方法是添加括号,或者更简单地说,直接使用函数名称,而不需要
lambda
。
以下是更正后的代码:
# Python Project Random Selector
import random
import tkinter as tk
root = tk.Tk()
def buttonfunc():
all_rest = [entrystr1.get(), entrystr2.get(), entrystr3.get()]
randomrest = random.choice(all_rest)
print(randomrest)
root.geometry("800x500")
root.title("Random Choice GUI")
label = tk.Label(root, text="Enter 3 of your favourite restaurants and seperate them by a comma (,): ", font=('Arial',16))
label.pack(padx=20, pady=20)
entrystr1 = tk.StringVar(value = 'type the first restaurant name here')
choice1 = tk.Entry(root, textvariable = entrystr1)
choice1.pack()
entrystr2 = tk.StringVar(value = 'type the second restaurant name here')
choice2 = tk.Entry(root, textvariable = entrystr2)
choice2.pack()
entrystr3 = tk.StringVar(value = 'type the third restaurant name here')
choice3 = tk.Entry(root, textvariable = entrystr3)
choice3.pack()
# 使用 buttonfunc 作为 command 参数,不需要 lambda
enterbtn = tk.Button(root, text="Enter", command=buttonfunc, font=('Arial',14) )
enterbtn.pack()
root.mainloop()
在这个更正后的代码中,我们将
command=buttonfunc
传递给按钮,而不是
command=lambda: buttonfunc
。这样就可以在点击按钮时正确地调用
buttonfunc
函数。