1

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

,使用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 秒,显示“二”,等待一秒,然后显示“三”。 但这label仅在我按下按钮后 2 秒后显示“三” 。

我也试过Statusbar了,结果相同。

PS:也许它是特定于Windows的?

PPS:gtk2hs 为 0.12.4

4

1 回答 1

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()

它现在工作正常!

于 2014-04-17T14:11:50.667 回答