如何在gtk2hs中标签或其他显示小部件中随后显示单词?

时间:2014-04-15 09:37:38

标签: windows haskell windows-7 gtk2hs

我需要按顺序表示标签中的单词(或其他显示类型小部件)

,使用 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

我认为,它应该显示&#34;一个&#34;在label中,等待1秒钟,显示&#34;两个&#34;,等待一秒钟,然后显示&#34;三个&#34;,当我按下按钮时。 这只会显示&#34;三&#34;在按下按钮2秒后,在label中。

我也试过Statusbar,结果相同。

P上。 S。:也许它是特定于Windows的?

P上。 P. S。:gtk2hs是0.12.4

1 个答案:

答案 0 :(得分:0)

解决方案是运行新线程!

我们需要将forkIO放在onPressed

的正文中
onPressed but $ do
    forkIO $ do
        set lab [labelText:="one"]
        threadDelay 1000000
        set lab [labelText:="two"]
        threadDelay 1000000
        set lab [labelText:="three"]
    return()

现在工作正常!