我构建了一个长时间运行的脚本,并使用以下代码向其添加了进度条:
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/