python - 如何在 tkinter python 中的按钮小部件的命令属性中使用 lambda 表达式调用回调函数

标签 python python-3.x tkinter data-science tkinter-entry

我使用 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()函数

最佳答案

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

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

在任何情况下,你根本不需要 lambda,你可以将 supress 函数作为参数传递

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

关于python - 如何在 tkinter python 中的按钮小部件的命令属性中使用 lambda 表达式调用回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57170932/

相关文章:

python - 输入字符串未添加到列表框中

python - Stacked Widgets 触发它们自己的事件

python - 在 Tkinter 中高效显示 OpenCV IplImage

user-interface - 如何使我的 ttk 小部件看起来很现代?

python-3.x - python3 file.readline EOF吗?

python - 类型错误 : split() takes no keyword arguments in Python 2. x

python - 我可以嵌套 virtualenvs 吗?

python - 将 .txt 文件从 .tar.gz 文件复制到其他目录

python - Numpy 未安装,也 "Can' 在以下目录中找不到可用的 init.tcl :"

python - 为什么 Python 集不保留插入顺序?