如何在 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
。
您好,我是 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
。