如何在 tkinter 中使用带 if-else 语句的 lambda 函数

How to use a lambda function with an if-else statement in tkinter

您好,我是 Python 和 tkinter 的初学者,我需要使用一个按钮,根据用户通过条目引入的键向我显示字典中的值。如果引入的键在字典中,则该值应显示在禁用条目中以描述键,如果不在字典中,则应显示一个消息框,要求使用不同的键。我在按钮命令中使用了 if-else lambda 函数,但它似乎不起作用,我不明白为什么。

我将使用的代码放在下面。

from tkinter import *
from tkinter import messagebox


root=Tk()

dictio={1:"one", 2:"two"}

test=False
textEntry = StringVar()
def show_description(key, dict, text):
    if key in dict.keys():
        textEntry.set(text)
    else:
        test=True

code_entry = Entry(root)
code_entry.grid(row=1, column=1, sticky='nsew')
description_entry = Entry(root, state="disabled", textvariable = textEntry)
description_entry.grid(row=0, column=1, sticky='nsew')

show_button = Button(root, text="Mostrar descripción", command=lambda test:show_description(int(code_entry.get()),
                                                                                dictio,
                                                                                dictio[int(code_entry.get())]) if (test==False) else messagebox.showinfo("Info", "The number is not in the database"))


show_button.grid(row=0, column=2)
root.mainloop()
from tkinter import *
from tkinter import messagebox


root=Tk()

dictio={1:"one", 2:"two"}

test=False
textEntry = StringVar() 
display=StringVar()
def show_description():
    print(display.get()) #==get the value of the stringvat
    x=int(display.get()) #==convert the value to integer
    if dictio.get(x)==None:
        messagebox.showinfo("Info", "The number is not in the database")
    else:
        textEntry.set(dictio.get(x)) #==get the value of the key from dictio dictionary and set it for description_entry
code_entry = Entry(root,textvariable=display)
display.set("") #==set value as nothing
code_entry.grid(row=1, column=1, sticky='nsew')
description_entry = Entry(root, state="disabled", textvariable = textEntry)
description_entry.grid(row=0, column=1, sticky='nsew')

show_button = Button(root, text="Mostrar descripción", command=show_description)


show_button.grid(row=0, column=2)
root.mainloop()

command 参数需要一个没有位置参数的函数,因此使用 lambda x: <do-something> 会引发错误。在这种情况下,需要在回调期间传递 none 个参数,因此您应该将事情简化为

def show_description():
    key = int(code_entry.get())
    if key in dictio:
        textEntry.set(dictio[key])
    else:
        messagebox.showinfo("Info", "The number is not in the database")

show_button = Button(root, text="Mostrar descripción", command=show_description)

另外,这样做

dictio[int(code_entry.get())]

在修复没有参数的 lambda 后,您的做法本可以引发 KeyError