Rktk2中的gtkProgressBar

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秒的计算时间,这是可以接受的).任何人都可以解释为什么会这样?

had*_*ley 6

处理一个事件:gtkMainIterationDo(FALSE).处理所有待处理的事件:while(gtkEventsPending()) gtkMainIteration().

由于R和Gtk事件循环交互的方式,需要此代码 - 在每个点,R或Gtk处于控制之中,并且需要手动将控制权交给另一个.Sys.sleep是这样做的一种方式,这些RGtk2特定功能是另一种.