将函数作为输入传递给另一个脚本中的另一个函数 (Python)

Passing functions as input to another function in another script (Python)

为了避免为我非常基本的 python 程序编写多次相似的 GUI,我在独立脚本中编写了一个 GUI 生成器函数,如下所示:

def GUI_builder_function(entry_list, entry_default_list, button_list, function_list, panel_title, background_colour):
    #Entries Generation

    ....

    #Buttons Generation
    for i in range(0, N_buttons,1):
        button = tk.Button(text = button_list[i], command= (lambda i=i: eval(function_list[i].__name__ +"()")), bg = 'firebrick', fg = 'white', font = ('helvetica', 9, 'bold'))
        input_data_panel.create_window(0.5*pos_width+300, 0.35*pos_height*(2*i+1) + 20, window = button)
        buttons.append(button)
...

这是一个非常简单的 GUI 生成器,它创建一些与输入条目列表和按钮列表相对应的条目和按钮,并且 space 它们以一种体面的方式创建。

现在,我的问题是:当用户单击第 i 个通用按钮时,它必须执行调用函数已发送到 gui 的函数 function_list[i]生成器函数.

然而,尽管 gui builder 函数已收到 function_list[i] 作为输入,但按下按钮时它无法执行。 python 引擎说:

“名称 'function name' 未定义”。

当然是在调用函数中定义的。但是将每个程序的每个调用函数都导入到公共的 gui builder 函数中会很脏。 我正在寻找的是如何将函数定义作为 gui builder 函数的输入发送给 gui builder,该函数位于独立脚本中,因为它必须由不同的程序使用

你只要直接引用函数,如果我理解正确的话,假设function_list实际上是一个函数列表而不是表示函数名称的字符串列表。

def foo():
    pass
def bar():
    pass

function_list = [foo, bar]
...
button = tk.Button(..., command= function_list[i], ...)