Обновить текст виджета с помощью wx haskell
Я делаю простой загрузчик изображений, чтобы изучить некоторые основные элементы графического интерфейса в haskell. У меня есть поле 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]
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