首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tk事件支出?

tk事件支出?
EN

Stack Overflow用户
提问于 2011-08-18 14:01:21
回答 2查看 115关注 0票数 3

如何在按钮回调例程中进行一些计算时刷新tk gui?

该例程需要很长时间,并且用户希望看到一些进展。

需要一些方法来重新绘制屏幕/查找取消按钮。

在gtk中是这样的:

代码语言:javascript
复制
/* computation going on */
...
    while (gtk_events_pending ())
      gtk_main_iteration ();
...
/* computation continued */
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-18 14:32:39

我可能没有抓住要点,但是你为什么不使用线程呢?您不能在回调中加入它,但您应该仍然能够生成事件。

代码语言:javascript
复制
TkButton.new :text => 'Hard routine',
             :command => proc { Thread.new { hard_routine } }.pack
Tk.mainloop

在回调中做繁重的事情被认为是一种糟糕的做法,因为它会阻塞整个事件循环,因此您的gui会冻结。

票数 1
EN

Stack Overflow用户

发布于 2011-08-19 16:47:54

与GTK代码片段等效的是(任何小部件的) update方法。在内部,它几乎做了完全相同的事情(即,它处理事件,直到没有更多的事情要做,但不会等待之后的任何事情)。

请注意,update引入了对回调的可重入调用的可能性;如果一个事件快速连续发生两次(在图形用户界面代码中非常容易发生),则有可能最终在其内部运行程序。你可能大部分时间都能幸免于难,但它很容易陷入严重的麻烦。引入某种类型的互锁(例如,在处理命令时禁用按钮,这也是一个很好的视觉隐喻)是一个很好的解决方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7103047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档