2012-02-28 3 views
1

google-fu는 나를 실패했습니다. Panel()에 추가 한 위젯을 제거하려면 어떻게해야합니까? 예를 들어, 다음에서 controls -panel을 다시 비워 둡니다.WxHaskell 패널에서 위젯을 제거하려면 어떻게해야합니까?

buildGUI = do 
    f <- frame [ text := "Hello" ] 

    controls <- panel f [] 
    ctext <- staticText controls [ text := "Foo" ] 
    set controls [ layout := margin 5 (widget ctext) ] 

    set f [ layout := widget controls ] 
    {- delete ctext ? How? -} 
    return() 

(동적 GUI를 만들려고합니다. 업데이트 할 때 이전 컨트롤을 제거해야합니다.)

+0

'visible' 속성을 사용해 보셨습니까? – bzn

답변

1

표시되지 않도록하고 레이아웃에서 제거 할 수 있습니다. 실제로 제거하지는 않지만 동적으로 UI를 변경합니다.

import Graphics.UI.WX 

buildGUI = do 
    f <- frame [ text := "Hello" ] 

    controls <- panel f [] 
    ctext <- staticText controls [ text := "Foo" ] 
    butn <- button controls [text := "Remove the Foo"]  -- I've added a button to remove Foo 
    set controls [ layout := row 0 [margin 5 (widget ctext), 
            margin 5 (widget butn) ]] 

    set f [ layout := widget controls ] 

    set butn [on command := do 
     set ctext [visible := False]       -- so ctext doesn't show 
     set controls [layout := margin 5 (widget butn) ]]  -- so ctext doesn't take up space 
    return() 

main = start buildGUI