1

我正在使用 ttk 在 python 中制作一个小脚本,但我遇到了一个问题,即函数在不应该运行的地方运行。按钮代码如下所示:

btReload = ttk.Button(treeBottomUI, text="Reload", width=17, command=loadModelTree(treeModel))
btReload.pack(side="left")

功能是这样的:

def 加载模型树(树):
    print ("加载模型...")
    allModels = os.listdir(confModPath)
    对于 allModels 中的块:
        ...

由于某种原因,该功能在没有按下按钮的情况下运行。为什么?

4

2 回答 2

2

Markus,是的,这是正确的解决方案,但这并不是因为您不能在小部件标注中使用多参数命令。考虑一下,在您的原始代码中,...command=loadModelTree(treeModel)...是对该方法的调用。Lambda 允许您抽象命令,这样您就可以拥有任意数量的参数,而不会通过调用它来混淆解释器,例如...command=lambda arg1=myarg1, arg2=myarg2, arg3=myarg3: myCallout(arg1, arg2, arg3)....

我希望这会使正在发生的事情更加清晰。

于 2012-07-25T02:53:10.400 回答
1

好吧,当我找到答案时,我会回答我自己的问题。它显示 ttk.button 命令不支持向函数发送参数,因此解决方法如下:

btReload = ttk.Button(treeBottomUI, text="Reload", width=17, command=lambda i=treeModel: loadModelTree(i))
btReload.pack(side="left")

像馅饼一样简单!

于 2010-06-01T07:25:45.333 回答