【问题标题】:Python passing an instance of a Tkinter button into its own commandPython 将 Tkinter 按钮的实例传递给它自己的命令
【发布时间】:2016-01-04 18:42:21
【问题描述】:

我试图弄清楚如何将按钮的实例传递给它自己的命令。基本上我想要做的是,如果被调用的命令事件成功,我想禁用该按钮。

这是我的按钮代码,它调用了一个名为“runco​​mmand”的函数:

btn_id = Button(tab_id, text=label, anchor=W)
btn_id.configure(command=lambda command=command, logtext=logtext, btn_id=btn_id: runcommand(command, logtext, btn_id))

一旦调用,如果满足条件,我会尝试在“运行命令”函数中禁用它:

btn_id.configure(state=DISABLED)

我不确定这是否可行,或者我只是走错了路。

【问题讨论】:

    标签: python button tkinter command


    【解决方案1】:

    你已经传入了对按钮的引用,所以

    def runcommand(command, text, btn_id):
        ...
        if (should_disable_the_button):
            btn_id.configure(state=DISABLED)
    

    【讨论】:

    • 抱歉,有点混乱。基本上,该程序是一个运行外部命令(批处理文件、foxpro 程序等)的仪表板。在这种情况下,“命令”是我从 XML 文件中提取的值,该文件详细说明了要调用的外部程序。
    • @brianj:我明白了。在重新阅读问题几次后,我重写了答案。您已经拥有了禁用该按钮所需的一切。
    • 如您所见,我尝试将“btn_id”传递给我最初发布的 runco​​mmand 函数,但它似乎不起作用。
    • @brianj:如果它不起作用,那么你做错了什么。这个解决方案是做你想做的事的正常方式。
    • 嗯,好的,我再仔细看看。我认为这是对的。如果我发现挂断,会报告。
    【解决方案2】:

    好吧,这就是我完全承认我是个笨蛋的地方。我正确地实现了这个功能。我在 runco​​mmand 函数中有一系列非常复杂的“if”条件,并且没有调用禁用代码。我指定了一个布尔标志来确定现在是否应该禁用该按钮。工作正常。杜...质量!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-28
      • 1970-01-01
      • 2016-11-30
      • 2018-10-10
      • 2023-02-24
      • 1970-01-01
      • 2023-03-23
      • 2015-08-14
      相关资源
      最近更新 更多