簡體   English   中英

使用wx haskell更新小部件文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM