首页 > 解决方案 > 如何使用按钮执行命令并在命令结束之前将其删除?Python / Tkinter

问题描述

我有一个界面,其中有一个“开始”按钮。它运行一个“主”命令,在该命令中启动一个循环以在功率计上运行一些测量。我希望能够在每次测量准备完成时单击“确定”按钮。此按钮将取代“开始”按钮。

但是当我尝试销毁按钮 ( buttonStart.destroy()) 然后运行命令main() 时,命令会执行但直到最后才删除按钮。我试过使用 threading 包中的线程,但它并没有真正起作用。

如果有办法既破坏按钮又运行命令,我会很感兴趣!

非常感谢

标签: pythontkinter

解决方案


必须为事件循环提供处理事件的机会,以便将窗口从屏幕上移除。

有几种方法可以做到这一点。第一种是update_idletasks在任何小部件上调用该方法。这通常足以处理与销毁小部件相关的事件,尽管可能需要调用它updateupdate如果可能的话,应该避免打电话。我的经验法则是从update_idletasks. 如果这不起作用,请切换到update或切换到使用after.

def my_custom_function():
    startButton.destroy()
    root.upddate_idletasks()
    main()

第二种方法是通过or运行你的main函数。这将使 tkinter 在开始之前自然地处理所有未决事件。我认为这是最好的方法。我建议先尝试,如果这不起作用,请稍候切换。afterafter_idlemainafter_idleafter

def my_custom_function():
    startButton.destroy()
    root.after_idle(main)

推荐阅读