1

我正在制作一个简单的图像下载器来学习一些基本的 gui 东西在 haskell 中。我有一个静态文本框,它在下载文件时显示文件名。

我遇到的问题是这个小递归函数。

saveImgs :: [String] -> IO ()
saveImgs [] = return ()
saveImgs (x:xs) = do
    let filename = tail $ x =~ "/[^/]*$"
    logMessage x
    maybeWrite filename =<< (simpleHttp x) `X.catch` statusExceptionHandler
    saveImgs xs
        where maybeWrite f b | b == L.empty = return ()
                             | otherwise    = L.writeFile f b

它需要保存图像的 url 列表,并更新 textCtrl 小部件。除了,它只更新一次文本,在整个事情完成后。有没有办法手动更新文本框的文本?

更新:我尝试添加一个计时器并启动它,但它没有做任何事情。

timerClk <- timer f [on command := windowRefresh logBox False]
4

1 回答 1

1

您可以尝试使用计时器刷新,就像在http://dready.org/papers/wxHaskell/Watch.hs中所做的那样

看线

    timerClk <- timer f [ on command := do { t <- getTimeString; set timeStatic [text := t]; windowRefresh timeStatic False} ]

请注意,Watch.hs 已被破坏,必须更新导入语句;如果您将导入替换为:

    import Graphics.UI.WX
    import Graphics.UI.WXCore hiding (Timer)
    import Data.Time          hiding (parseTime)
    import Control.Monad
    import System.Time
    import System.Environment
于 2015-11-22T21:10:14.810 回答