Как я могу удалить виджеты с панели WxHaskell - PullRequest
1 голос
/ 28 февраля 2012

Мой гугл-фу подвел меня. Как я могу удалить виджеты, которые я добавил в Panel ()? Например, в следующем разделе я хочу, чтобы панель controls снова стала пустой.

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

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

1 Ответ

1 голос
/ 16 августа 2012

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

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
...