nic*_*ico 3 gtk r progress-bar
我正在尝试添加一个gtkProgressBar我为R脚本创建的小接口(使用该RGtk2包).
如果我做一些简单的事情,如:
for (i in 1:50)
{
gtkProgressBarSetFraction(progress, i/50)
Sys.sleep(1)
}
Run Code Online (Sandbox Code Playgroud)
一切顺利,酒吧每秒更新一次.
但是,当我转到我的实际代码时,我有一个循环,我做了类似的事情
for(i in 1:1000)
{
gtkProgressBarSetFraction(progress, i/1000)
#do some heavy computation here
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是界面"冻结"并且进度条仅在循环结束时更新,因此完全击败其使用...
我在这里错过了什么吗?如何定期"唤醒"界面以使其刷新?
谢谢你尼科
编辑:好的,我解决了问题,但我仍然不明白发生了什么.我之后添加了一个Sys.sleep电话gtkProgressBarSetFraction,现在接口更新了.为了减少"浪费的时间",我刚才这样做了Sys.sleep(0.0001)(因此,对于1000个周期,我只有大约0.1-1秒的计算时间,这是可以接受的).任何人都可以解释为什么会这样?
处理一个事件:gtkMainIterationDo(FALSE).处理所有待处理的事件:while(gtkEventsPending()) gtkMainIteration().
由于R和Gtk事件循环交互的方式,需要此代码 - 在每个点,R或Gtk处于控制之中,并且需要手动将控制权交给另一个.Sys.sleep是这样做的一种方式,这些RGtk2特定功能是另一种.