【问题标题】:Python ttk.Button -command, runs without button being pressedPython ttk.Button -command,无需按下按钮即可运行
【发布时间】:2011-02-26 05:31:15
【问题描述】:

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

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

功能如下:

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

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

【问题讨论】:

    标签: python function button ttk


    【解决方案1】:

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

    我希望这能让事情变得更清楚。

    【讨论】:

      【解决方案2】:

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

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

      简单到不行!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-04
        • 2013-12-15
        • 2018-06-24
        • 2018-10-23
        • 1970-01-01
        • 1970-01-01
        • 2016-12-05
        • 1970-01-01
        相关资源
        最近更新 更多