python运行停留窗口_当程序处于休眠状态时,停止tkinter窗口冻结

H.E.p.公司-

传统的方法确实涉及到使用一个单独的线程,并使用某种轮询或事件机制来协调“worker”线程和GUI线程之间的工作。在

但是,正如thomask.所指出的,这可能会变得非常复杂和棘手,尤其是对于Python使用全局解释器锁(GIL)等,并且还必须处理Tkinter的处理循环。在

(使用多线程GUI的唯一理由是,如果您绝对必须确保GUI在可能长时间运行的后台任务期间保持响应,我不认为这是本例中的问题。)

相反,我建议使用基于生成器的“协同例程”类型的体系结构。

正如第6.8节“Python(2.7)语言参考”中所述,[定义生成器函数时使用“yield”语句,并且仅在生成器函数体中使用。在函数定义中使用yield语句足以使该定义创建一个生成函数,而不是普通函数。]

(这有效地构成了协同程序体系结构的基础。(编辑)

[当一个生成器函数被调用时,它返回一个称为生成器迭代器的迭代器,或者更常见的是一个生成器。生成器函数的主体是通过反复调用生成器的next()方法来执行的,直到它引发异常为止。在

执行yield语句时,生成器的状态被冻结,expression\u list的值返回给next()的调用方。“冻结”意味着所有的局部状态都会被保留,包括本地变量的当前绑定、指令指针和内部计算堆栈:保存了足够的信息,以便下次调用next()时,函数可以像yield语句只是另一个外部调用一样继续执行。]

(另请参阅“PEP 0342-通过增强的生成器协同程序”,了解更多背景和一般信息。)

这将允许GUI根据需要调用算法规范生成器的下一部分,而不必在操作员按下“下一步”按钮之前将其置于休眠状态。

基本上,您只需创建一个“特定于域的语言”(DSL),它只包含表示该特定算法的步骤列表,生成器(迭代器)将在调用时(按需)执行下一步。在

更简单,更容易维护。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值