【问题标题】:Button command being called automatically按钮命令被自动调用
【发布时间】:2010-12-06 19:29:23
【问题描述】:

出于某种原因,此按钮会自动调用bot_analysis_frame,而无需按下按钮。我猜这是因为command 是一个带参数的函数。

有没有办法让按钮只调用这个函数并在被按下时只传递所需的变量

Button(topAnalysisFrame, text='OK', command=bot_analysis_frame(eventConditionL, eventBreakL)).pack(side=LEFT)

【问题讨论】:

标签: python tkinter


【解决方案1】:

阅读此处有关传递callbacks 的部分。

您将该函数的结果存储到命令参数而不是函数本身。

我相信这一点:

command = lambda: bot_analysis_frame(eventConditionL,eventBreakL)

可能对你有用。

【讨论】:

  • 请注意,在循环中创建的闭包不会像“预期的”那样工作(它实际上工作正常,你只需要让闭包真正捕获变量,而不是值)。在[lambda: print(i) for i in range(5)] 中创建的所有函数都将打印i 的最终值,4。您可以通过默认参数解决这个问题,这些参数在定义时绑定:lambda i=i: print(i) 将起作用。
【解决方案2】:

我很确定这个问题之前已经回答过了。而不是这个:

Button(topAnalysisFrame,
       text='OK',
       command=bot_analysis_frame(eventConditionL,eventBreakL)).pack(side=LEFT)

你可以像这样使用 lambda:

Button(topAnalysisFrame,
       text="OK",
       command=lambda: bot_analysis_frame(eventConditionL, eventBreakL)).pack(side=LEFT)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2014-03-05
    • 2012-09-19
    • 1970-01-01
    相关资源
    最近更新 更多