在此代码中,按下按钮时 GUI 冻结。该问题源于在线程上使用 join(),这会阻塞 GUI 的 mainloop(),直到线程完成执行。
Tkinter 是一个单线程GUI库,意味着所有GUI操作必须在主线程上执行。当使用 join() 启动线程时,它会阻止主线程执行更多代码,直到线程完成。这可能会导致 GUI 变得无响应,甚至完全挂起。
为了避免冻结问题,应修改代码以使用非阻塞方法来执行线程。一种方法是使用 tkinter 小部件的 after() 方法来安排一个函数在指定的延迟后执行。
<code class="python">m = magic() def hello_callback(): m.add_item("asd") m.start_converting("test") # Schedule the function to be executed after 50 milliseconds top.after(50, hello_callback)</code>
在此代码中,hello_callback 函数被安排执行50 毫秒后。这允许 GUI 在线程在后台执行时继续响应用户输入。
通过使用非阻塞方法来执行线程,GUI 保持响应并且冻结问题已解决。
以上是当我在线程上使用 join() 时,为什么我的 tkinter GUI 冻结了?的详细内容。更多信息请关注PHP中文网其他相关文章!