使用AutoIt刷新GUI

时间:2014-07-20 16:52:02

标签: user-interface autoit

我正在制作AutoIt代码,并且GUI上的一个项目需要每隔几秒更新一次,我似乎可以做到这一点。为了简单起见,我编写了一些显示问题的代码:

$num = 0
GUICreate("Example")
$Pic1 = GUICtrlCreateLabel($num, 10, 10)
GUISetState()
While 1
   sleep(1000)
   $num = $num + "1"
WEnd

如果代码正常工作,那么数字会改变,但事实并非如此。如何刷新?

3 个答案:

答案 0 :(得分:4)

号码正在更新,但您的数据不是。另外,您将整数与字符串混合。

幸运的是,AutoIt会自动转换它们。但要小心,因为你会遇到其他编程语言的问题。

你走了:

Local $num = 0
Local $hGUI = GUICreate("Example")
Local $Pic1 = GUICtrlCreateLabel($num, 10, 10)
GUISetState()

Local $hTimer = TimerInit()
While 1
    ;sleep(1000)
    If TimerDiff($hTimer) > 1000 Then
        $num += 1
        GUICtrlSetData($Pic1, $num)
        $hTimer = TimerInit()
    EndIf

    If GUIGetMsg() = -3 Then ExitLoop
WEnd

P.S。:在他们暂停你的剧本时,避免在这些情况下使用睡眠。

答案 1 :(得分:4)

使用AdLibRegister传递函数名称然后1000毫秒(1秒)即可轻松完成。

Local $num = 0
Local $hGUI = GUICreate("Example")
Local $Pic1 = GUICtrlCreateLabel($num, 10, 10)
Local $msg
GUISetState()

AdLibRegister("addOne", 1000)

While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd

Func addOne ()
    $num += 1
    GUICtrlSetData($Pic1, $num)
EndFunc

答案 2 :(得分:1)

您需要使用GUICtrlSetData在GUI中设置新数据。只需像这样修改你的循环:

While 1
   sleep(1000)
   $num += 1
   GUICtrlSetData($Pic1, $num)
WEnd

请注意,我删除了双引号,以便AutoIt将值作为整数处理。