【问题标题】:Python TKinter multiple operationsPython TKinter 多重操作
【发布时间】:2011-12-17 14:45:04
【问题描述】:

我在表单上有两个按钮,当我按下按钮时,它保持按下状态,并且框架保持无响应状态,直到 button1 的操作完成,在我的情况下,我调用保持打开状态的新 xterm 窗口,并且我想使用 button2打开新的 xterm,但直到我从 button1 命令关闭 xterm 窗口,整个 GUI 都没有响应。 这是为什么? 谢谢,我两天前开始使用 TKinter,所以请放轻松:)

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    Tkinter 在单线程中工作。所以当你按下按钮时,回调命令显然很长时间没有返回。这会导致 Tkinter GUI 冻结,直到回调命令返回。

    如果可能,解决方案是将回调命令分成更小的部分,可能是一个循环,并频繁调用update_idletasks() 以允许 Tkinter GUI 更新。

    如果这是不可能的,那么回调命令应该spawn a thread 这样它的执行就不会阻塞 Tkinter 主事件循环。

    【讨论】:

    • 感谢您的回答和链接:)
    【解决方案2】:

    另一个对我有帮助的类似解决方案是运行一些

    root.update()
    

    在需要大量资源的循环/函数内部。这比 'update_idletasks()' 更加激烈,所以要小心它是否与您的 GUI 设置和/或您的一般脚本结构兼容。

    'root' 当然是 Tkinter 生成的窗口/表单的名称。 另外,请注意 .update() 不仅仅是“刷新”GUI。

    【讨论】:

      猜你喜欢
      • 2012-08-19
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-20
      • 2012-07-09
      相关资源
      最近更新 更多