如何从按钮从外部源调用函数。[Python]
我一直在拼命尝试让这段代码在我的程序中工作。我基本上想从一个文件中读入几个选项,并从这些选项中创建Tkinter按钮。创建按钮不是问题;目前,我无法让代码运行我想要的函数如何从按钮从外部源调用函数。[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])):
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那里的说明会有所帮助,谢谢您的帮助。您是否有可能快速分解并解释放在那里的第二行代码。我有点困惑,但我理解它是如何工作的。