我正在制作一个简单的图像下载程序,以便在haskell中学习一些基本的gui内容。我有一个staticText框,可以在下载文件名时显示文件名。
我遇到的问题是这个小的递归函数。
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]
答案 0 :(得分: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是bitrotten,必须更新import语句;如果用以下内容替换导入,它应该有效:
import Graphics.UI.WX
import Graphics.UI.WXCore hiding (Timer)
import Data.Time hiding (parseTime)
import Control.Monad
import System.Time
import System.Environment