3

我已经构建了一个长时间运行的脚本,我在其中添加了一个带有以下代码的进度条:

function StartProgressBar()
   gaugeProgress = iup.gaugeProgress{}
   gaugeProgress.show_text = "YES"
   gaugeProgress.expand = "HORIZONTAL"
   dlgProgress = iup.dialog{gaugeProgress; title = "Note Replacement in Progress"}
   dlgProgress.size = "QUARTERxEIGHTH"
   dlgProgress.menubox = "NO"  --  Remove Windows close button and menu.
   dlgProgress:showxy(iup.CENTER, iup.CENTER)  --  Put up Progress Display 
   return dlgProgress
end

这在循环之前调用,并且在循环期间更新进度条(我没有调用 MainLoop)。在该过程结束时,我调用 dlgProgress.destroy 来清除它。

只要我不从进度条中获取焦点,它就可以正常工作,但是如果失去焦点,程序就会崩溃,所以我确信我这样做是错误的。谁能告诉我正确的方法。详细google了一下,没有找到任何关于iup、lua进度条的例子。

先感谢您。

4

1 回答 1

2

这是一个工作示例。

需要“iuplua”

本地取消标志
本地仪表进度

局部函数 StartProgressBar()
    取消按钮 = iup.button {
        title = "取消",
        动作=函数()
            取消标志 = 真
            返回 iup.CLOSE
        结尾
    }
    gaugeProgress = iup.progressbar{ expand="HORIZONTAL" }
    dlgProgress = iup.dialog{
        title = "正在更换笔记",
        对话框框=“是”,边框=“是”,
        iup.vbox {
            测量进度,
            取消按钮,
    }
    }
    dlgProgress.size = "QUARTERxEIGHTH"
    dlgProgress.menubox = "NO" -- 删除 Windows 关闭按钮和菜单。
    dlgProgress.close_cb = cancelbutton.action
    dlgProgress:showxy(iup.CENTER, iup.CENTER) -- 放上进度显示
    返回 dlgProgress
结尾


dlg = StartProgressBar()
gaugeProgress.value = 0.0

对于 i=0,10000 做
    -- 在漫长的计算中迈出一步
    -- 以某种有意义的方式更新进度
    gaugeProgress.value = i / 10000
    -- 允许对话框处理任何消息
    iup.LoopStep()
    -- 注意到用户想要取消并做一些有意义的事情
    如果取消标志则中断结束
结尾

-- 通过检查标志区分已取消和已完成
打印(“取消:”,取消标志)

我在这里使用了 IUP 3.0,以及它的标准 Lua 绑定。仪表控件iup.progressbar在 IUP 3.0 中命名,并iup.gauge在早期版本中命名。在早期版本中,它可能也在扩展控件库中。

我已经在 Windows 上对此进行了测试。一个假设它在其他平台上具有类似的行为,但您的里程可能会有所不同。

于 2010-09-04T22:30:10.647 回答