我需要按顺序表示标签(或其他显示类型的小部件)中的单词
,使用gtk2hs。
我试过这个:
import Graphics.UI.Gtk
import Control.Concurrent
main = do
initGUI
window <- windowNew
window `onDestroy` mainQuit
lay <- vBoxNew False 0
but <-buttonNewWithLabel "Sequently show one, two and three"
lab <- labelNew Nothing
onPressed but $ do
labelSetText lab "one"
threadDelay 1000000
labelSetText lab "two"
threadDelay 1000000
labelSetText lab "three"
containerAdd window lay
containerAdd lay but
containerAdd lay lab
widgetShowAll window
onDestroy window mainQuit
mainGUI
我认为,当我按下按钮时,它应该在label
中显示"一",等待1秒,显示"二",等待一秒钟,然后显示"三"。但是在我按下按钮2秒钟后,这只在label
中显示"三"。
我也尝试了Statusbar
,它给出了相同的结果。
第页。S.:也许是窗户特有的?
第页。P.S.:gtk2hs为0.12.4
解决方案是运行新线程!
我们需要将forkIO
放入onPressed
:的主体中
onPressed but $ do
forkIO $ do
set lab [labelText:="one"]
threadDelay 1000000
set lab [labelText:="two"]
threadDelay 1000000
set lab [labelText:="three"]
return()
它现在运行良好!