[英]Update widget text with wx haskell
我正在制作一個簡單的圖像下載器,以學習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]
您可以嘗試使用計時器進行刷新,就像在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語句; 如果您將導入替換為:
import Graphics.UI.WX
import Graphics.UI.WXCore hiding (Timer)
import Data.Time hiding (parseTime)
import Control.Monad
import System.Time
import System.Environment
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.