python - 如何使用按钮执行命令并在命令结束之前将其删除?Python / Tkinter
问题描述
我有一个界面,其中有一个“开始”按钮。它运行一个“主”命令,在该命令中启动一个循环以在功率计上运行一些测量。我希望能够在每次测量准备完成时单击“确定”按钮。此按钮将取代“开始”按钮。
但是当我尝试销毁按钮 ( buttonStart.destroy()
) 然后运行命令main()
时,命令会执行但直到最后才删除按钮。我试过使用 threading 包中的线程,但它并没有真正起作用。
如果有办法既破坏按钮又运行命令,我会很感兴趣!
非常感谢
解决方案
必须为事件循环提供处理事件的机会,以便将窗口从屏幕上移除。
有几种方法可以做到这一点。第一种是update_idletasks
在任何小部件上调用该方法。这通常足以处理与销毁小部件相关的事件,尽管可能需要调用它update
。update
如果可能的话,应该避免打电话。我的经验法则是从update_idletasks
. 如果这不起作用,请切换到update
或切换到使用after
.
def my_custom_function():
startButton.destroy()
root.upddate_idletasks()
main()
第二种方法是通过or运行你的main
函数。这将使 tkinter 在开始之前自然地处理所有未决事件。我认为这是最好的方法。我建议先尝试,如果这不起作用,请稍候切换。after
after_idle
main
after_idle
after
def my_custom_function():
startButton.destroy()
root.after_idle(main)