r - RGtk2 中的 gtkProgressBar

标签 r gtk progress-bar

我正在尝试将 gtkProgressBar 添加到我为 R 脚本创建的小界面(使用 RGtk2 包)。

如果我做一些简单的事情,比如:

for (i in 1:50)
    {
    gtkProgressBarSetFraction(progress, i/50)
    Sys.sleep(1)
    }

一切运行顺利,栏每秒更新一次。

但是,当我转到我的实际代码时,我有一个循环,我在其中执行类似的操作

for(i in 1:1000)
    {
    gtkProgressBarSetFraction(progress, i/1000)
    #do some heavy computation here
    }

这里的问题是界面“卡住”并且进度条仅在循环结束时更新,因此完全无法使用...

我在这里遗漏了什么吗?如何定期“唤醒”界面以使其刷新?

谢谢 妮可

编辑:好的,我解决了问题,但我仍然不明白发生了什么。我在 gtkProgressBarSetFraction 之后添加了一个 Sys.sleep 调用,现在界面更新愉快。为了减少“浪费时间”,我只是做了 Sys.sleep(0.0001) (所以对于 1000 个周期,我只会多出约 0.1-1 秒的计算时间,这是可以接受的)。任何人都可以解释为什么会发生这种情况?

最佳答案

处理一个事件:gtkMainIterationDo(FALSE)。处理所有未决事件:while(gtkEventsPending()) gtkMainIteration().

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

关于r - RGtk2 中的 gtkProgressBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3820402/

相关文章:

r - R 中 MACD 返回错误值

将连续栅格数据重新分类为具有离散颜色的分箱类

python - Gio.SimpleAction 不发出改变状态信号

php - Yii Booster - 包含进度条时的 td 单元格高度

java - 根据 slider 的值更改进度条颜色JavaFX

jquery - N秒内统一更新jQueryUI Progressbar

r - 将列表转换为多个数据框,以便能够仅将每个数据框的一列转换为数字数据

r - plyr 中的计数不起作用,返回 "wrong result size (3), expected 8 or 1"

python - 双击检索 TreeView 数据

css - Gtk3 css 应用类不起作用?