PYGTK 的线程刷新界面的完美解决

问题: 你有一个长的处理过程, 该过程将诸塞GTK主循环对事件的控制, 导致界面在处理过程中没有响应, 更糟糕的是, 即使你想在处理过程中刷新界面, 提示进度都毫无用处, 因为它是诸塞的线程, 要么你看不见任何更新, 要么等到处理完成时他们一股脑儿都显示出来. 显然这不是我们想要的.

解决: google 了无数文章, 各种方法齐上阵, 但都显得麻烦, 最后, pygtk 的官方Q&A文档给出了最佳答案, 用生成器. 该文地址: http://faq.pygtk.org/index.py?req=show&file=faq23.020.htp

 

我的演示代码, 下面的代码演示一个在滚动窗口中按行输出0~99的数字. 用了空循环来模拟延时, 我们希望看到的是在界面中他们能一行一行的出现, 而不是"诸塞--dump"

 

 

 

关键点,

1. 把你的处理过程包裹成一个函数:function.

2. 用gobject.idle_add(function, next) 来告诉gtk我需要空闲处理这个函数.

3. 在你的处理过程中, 用yield True 来告知主线程有空闲, 但是我这个子线程还没完. 当子线程跑完了, 用yield False 告知主线程.

 

 

同样, 如果你是一个长的处理过程, 中间一般都要更新界面, 省得看上去和冻结了一样, 使用这种方法是最简单, 最安全, 没有副作用的. 参考官方文档的详细描述.

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值