如何从按钮从外部源调用函数。[Python]

如何从按钮从外部源调用函数。[Python],python,oop,tkinter,Python,Oop,Tkinter,我一直在拼命尝试让这段代码在我的程序中工作。我基本上想从一个文件中读入几个选项,并从这些选项中创建Tkinter按钮。创建按钮不是问题;目前,我无法让代码运行我想要的函数 from Lib import StegosaurMainCode as Steg ... class App: def __init__(self, master, menu): buttons = [] for counter in range(0, len(menu[0])):

我一直在拼命尝试让这段代码在我的程序中工作。我基本上想从一个文件中读入几个选项,并从这些选项中创建Tkinter按钮。创建按钮不是问题;目前,我无法让代码运行我想要的函数

from Lib import StegosaurMainCode as Steg
...
class App:
    def __init__(self, master, menu):
        buttons = []
        for counter in range(0, len(menu[0])):
            text = menu[0][counter]
            func = menu[1][counter]
            att = menu[2][counter]
            buttons.append(Button(text=text, command=lambda: Steg.func(att)))
        frame = Frame(master)
        for item in buttons:
            item.pack()
        frame.pack()

在这个类中,func是我要调用的函数,Steg是另一个文件中的外部代码,att是函数的属性。我似乎不明白为什么
Steg.func
不会尝试调用Steg中名为“func”的函数,而不是变量
func
中描述的函数,在每次调用时让lambda重新绑定其
att
参数

class App:
    def __init__(self, master, menu):
        buttons = []
        for counter in range(0, len(menu[0])):
            text = menu[0][counter]
            func = menu[1][counter]
            att = menu[2][counter]
            buttons.append(Button(text = text, command = lambda att = att: Steg.func(att)))
        frame = Frame(master)
        for item in buttons:
            item.pack()
        frame.pack()

假设
菜单[1][counter]
包含字符串而不是对实际函数的引用,则需要获取对函数的引用,然后将其用作
命令
属性的值。您可以使用getattr执行此操作:

func = getattr(steg, menu[1][counter])
完成后,可以使用
func
,就好像它是一个实际函数一样。但是,您需要将变量绑定到它们的当前值,因此需要将它们作为参数传递给lambda:

button = Button(text=text, command=lambda func=func, attr=att: func(att)))

如何导入Steg?刚刚编辑好以便查看。
菜单[1][counter]
中有什么?它是字符串还是对函数的实际引用?当您运行问题中的代码时,会出现什么错误?我们无法运行它,因为它依赖于我们未知的变量。如果您阅读并遵循Hi那里的说明会有所帮助,谢谢您的帮助。您是否有可能快速分解并解释放在那里的第二行代码。我有点困惑,但我理解它是如何工作的。