【问题标题】:python Tkinter buttons are freezing while waitingpython Tkinter按钮在等待时冻结
【发布时间】:2018-06-11 04:51:54
【问题描述】:

我用 Tkinter 写了一个 gui 类:

def start_gui():

    def do_some_task():
      dosometask

    def do_some_task2():
      dosometask2

    ttk.Button(mainframe, text="task1", command=do_some_task).grid(column=1, row=3, sticky=W)
    ttk.Button(mainframe, text="task2", command=do_some_task2).grid(column=2, row=3, sticky=W)


if __name__ == "__main__":
   start_gui()

当我按下任一按钮时,GUI 会冻结,直到任务完成。如何使用线程来防止这种情况,使两个按钮始终可用?

【问题讨论】:

  • 就时间而言,它们会冻结多长时间?
  • 直到函数完成他的工作并返回
  • 您的计算机需要多长时间?
  • 它在很长的字符串中进行一些文本搜索
  • 使用模块threading 运行dosometask 然后它不会阻塞mainloop() 也不会冻结GUI。或者您可以尝试在dosometask 中定期使用root.update(),这样它会强制mainloop 执行一个循环并刷新GUI。

标签: python user-interface tkinter


【解决方案1】:

tkinter 是单线程的。当一个函数正在运行时,它无法为事件提供服务,包括诸如请求重绘窗口之类的事件。

如果您的按钮调用的功能需要超过几百毫秒左右,您需要在单独的线程或进程中运行它们,以便 tkinter 做出响应。

【讨论】:

  • @kabe:做一点研究。这个网站上可能有十几个或更多的问题。
猜你喜欢
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 2017-10-22
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 2019-05-10
相关资源
最近更新 更多