首页 > 解决方案 > 如何在 tkinter python 的按钮小部件的命令属性中使用 lambda 表达式调用回调函数

问题描述

我使用 tkinter 创建了一个 gui,在其中创建了一个带有 Toplevel 小部件的新窗口,并将小部件添加到该窗口中,例如输入框、标签和按钮小部件。按钮小部件的命令属性使用 lambda 表达式调用回调函数,因此在执行此回调函数之前 gui 不得继续。但是,由于某些问题,当我按下按钮小部件时,未调用回调函数。

def toplevel_widget(obj):
    def suppress():
        try:
            if obj.fillna_value.get():
                fill_na_value_window.withdraw()
            else:
                raise Empty_na_value_entry_Error("The textbox can't be left empty!!\nFill any data in it.")
        except Empty_na_value_entry_Error as e:
            msgbox.showerror("Error",e.msg)

    fill_na_value_window=tk.Toplevel(obj)
    obj.fillna_value=tk.StringVar()
    tk.ttk.Label(fill_na_value_window,text="Enter the value to be inserted").grid(row=1,column=0,padx=10,pady=10)
    tk.ttk.Entry(fill_na_value_window,textvariable=obj.fillna_value,width=15).grid(row=1,column=1,padx=10,pady=10)
    tk.ttk.Button(fill_na_value_window,text="Ok",command=lambda : suppress,width=10).grid(row=2,columnspan=2)


    Cleanser_manual.fillna_toplevel_widget(obj)
    val=obj.fillna_value.get()
    print("Value : ",val)  #here **Value :    is printed on screen**

此处即使单击按钮后也不会调用 suppress() 函数

标签: pythonpython-3.xtkinterdata-sciencetkinter-entry

解决方案


您没有在 lambda 函数中调用 supress,您错过了括号

(..., command=lambda: supress(), ...)

无论如何,您根本不需要 lambda,您只需将 supress 函数作为参数传递

(..., command=supress, ...)

推荐阅读