изменить макет wxhaskell программно

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

import Graphics.UI.WX

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

  controls <- panel f []
  ctext <- staticText controls [ text := "Foo" ]
  butn <- button controls [text := "change layout"]
  set controls [ layout := row 0 [margin 5 (widget ctext),
                                  margin 5 (widget butn) ]]

  set f [ layout := widget controls ]

  set butn [on command := do
      -- switch layout, button first, text second
      set controls [layout := row 0 [ margin 5 (widget butn)
                                    , margin 5 (widget ctext) ]]
  {-
     repaint doesn't do it, but if I resize the frame by hand,
     the layout changes
  -}    
      repaint controls         ]

  return ()

main = start buildGUI

person Schoon    schedule 28.01.2015    source источник
comment
Я не знаю wxWidgets, но команда, которую вы ищете, обычно называется pack или repack...   -  person MathematicalOrchid    schedule 28.01.2015
comment
Спасибо, я нашел функцию под названием refit, которая помогает.   -  person Schoon    schedule 28.01.2015


Ответы (1)


Я сам нашел ответ после поиска в Google с учетом комментария MathematicalOrchid. Функция называется refit.

person Schoon    schedule 28.01.2015