如何使用Lua和IUP显示进度条

时间:2010-09-04 09:19:25

标签: lua iup

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

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来清除它。

只要我没有从进度条中获取焦点就可以正常工作,但如果焦点丢失,程序会崩溃,所以我确信我这样做的方式不对。任何人都可以告诉我正确的方法。一个详细的谷歌没有找到任何关于iup,lua进度条的例子。

提前谢谢。

1 个答案:

答案 0 :(得分:2)

这是一个工作样本。

require "iuplua"

local cancelflag
local gaugeProgress

local function StartProgressBar()
    cancelbutton = iup.button {
        title = "Cancel",
        action=function()
            cancelflag = true
            return iup.CLOSE
        end
    }
    gaugeProgress = iup.progressbar{ expand="HORIZONTAL" }
    dlgProgress = iup.dialog{
        title = "Note Replacement in Progress",
        dialogframe = "YES", border = "YES",
        iup.vbox {
            gaugeProgress,
            cancelbutton,
    }
    }
    dlgProgress.size = "QUARTERxEIGHTH"
    dlgProgress.menubox = "NO"  --  Remove Windows close button and menu.
    dlgProgress.close_cb = cancelbutton.action
    dlgProgress:showxy(iup.CENTER, iup.CENTER)  --  Put up Progress Display
    return dlgProgress
end


dlg = StartProgressBar()
gaugeProgress.value = 0.0

for i=0,10000 do
    -- take one step in a long calculation
    -- update progress in some meaningful way
    gaugeProgress.value = i / 10000
    -- allow the dialog to process any messages
    iup.LoopStep()
    -- notice the user wanting to cancel and do something meaningful
    if cancelflag then break end
end

-- distinguish canceled from finished by inspecting the flag
print("cancled:",cancelflag)

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

我在Windows上测试了这个。一个人认为它在其他平台上有类似的行为,但你的里程可能会有所不同。