2012-02-28 3 views
1

Мой google-fu мне не удалось. Как удалить виджеты, которые я добавил в Panel()? Например, в следующем, я хочу, чтобы controls -панель снова стала пустой.Как я могу удалить виджеты из панели 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() 

(Я пытаюсь создать динамический графический интерфейс, и мне нужно избавиться от старых элементов управления при его обновлении).

+0

Вы пробовали атрибут 'visible'? – bzn

ответ

1

Вы можете сделать его невидимым и удалить из макета. Это фактически не удаляет его, но меняет пользовательский интерфейс динамически:

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