我构建了一个长时间运行的脚本,并使用以下代码向其添加了进度条:

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进度栏的任何示例。

先感谢您。

最佳答案

这是一个工作示例。

需要“iuplua”

本地取消标志
本地测量进度

本地函数StartProgressBar()
cancelbutton = iup.button {
title =“取消”,
行动=功能()
cancelflag = true
返回iup。CLOSE
结束
}
gaugeProgress = iup.progressbar {expand =“HORIZONTAL”}
dlgProgress = iup.dialog {
title =“正在进行票据替换”,
dialogframe ="is",边框="is",
iup.vbox {
gaugeProgress,
取消按钮,
}
}
dlgProgress.size =“QUARTERxEIGHTH”
dlgProgress.menubox =“否”-删除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()
-注意用户要取消并做有意义的事情
如果取消标志,则中断结束
结束

-通过检查标志来区分取消与完成
print(“cancled:”,cancelflag)

我在这里使用了IUP 3.0及其标准的Lua绑定(bind)。仪表控件在IUP 3.0中名为iup.progressbar,在早期版本中称为iup.gauge。在早期版本中,它可能也已经在扩展控件库中。

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

关于lua - 如何使用Lua和IUP显示进度栏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3641616/

10-11 00:44