当回调时间过长时,如何使 PyGTK 小部件快速响应?
我在_init回调函数中做了一个耗时的处理。因此,在 GUI 上,当我激活复选按钮时,程序会冻结,而处理运行完成,然后出现复选标记并正常恢复执行。
self.init = gtk.CheckButton("Init", False)
self.init.connect("toggled", self._init)
def _init(self, w):
....
如何在处理过程中使 GUI 的响应速度更快?
有没有办法让 GUI 在开始时改变复选框的状态,然后进入重循环?
I do a time-consuming processing in the _init callback function. Therefore, at the GUI, when I activate the check-button, the program freezes, while the processing runs to completion, and then the check mark appears and execution resumes normally.
self.init = gtk.CheckButton("Init", False)
self.init.connect("toggled", self._init)
def _init(self, w):
....
How do I make the GUI more responsive while the processing takes place ?
And is there a way I can make the GUI change the state of the check-box right in the beginning and then enter the heavy loop ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您有几种解决方案:
我给你的例子是C语言的,但Python的精神是一样的。
You have several solutions:
The examples I gave you are in C, but the spirit is the same in python.
在处理程序中,将 init 的其余部分注册为空闲处理程序并返回。
gtk.idle_add
IIRC。这样它将在处理 gui 事件后运行。检查文档以了解需要返回哪个值,以便该函数不会再次启动。In the handler, register the rest of the init as idle-handler and return.
gtk.idle_add
IIRC. That way it will run after the gui events are handled. Check documentation to see which value you need to return so the function is not started again.