wxHaskell: слишком маленький начальный размер кадра

После установки WxHaskell и gtk2hs я играю с обоими, чтобы решить, какой из них выбрать. Для WxHaskell я работаю с документацией на WxHaskell на haskell.org. Следующий первый пример взят из раздела "Быстрый старт":

 -- Copied from www.haskell.org/haskellwiki/WxHaskell/Quick_start

 module Main where
 import Graphics.UI.WX

 main :: IO ()
 main
   = start hello

 hello :: IO ()
 hello
   = do f    <- frame    [text := "Hello!"]
        quit <- button f [text := "Quit", on command := close f]
        set f [layout := widget quit]

за исключением

 Debug: wxColour::Set - couldn't set to colour string 'MEDIUM GREY'

и строки, похожие на следующие для различных форматов файлов изображений

 Debug: Adding duplicate image handler for 'PNG file'

код прекрасно компилируется и прекрасно загружается в GHCi. Тем не менее, появляющееся окно при запуске имеет высоту, равную нулю, видна только верхняя панель окна без изменения размера окна вручную, чтобы включить кнопку. Это происходит как при компиляции, так и при загрузке в GHCi. В GHCi высота будет правильной при выполнении main в секунду и в любой следующий раз. Если я закрою и перезапущу сеанс GHCi, это будет "плоским" и не будет включать кнопку при первом обращении к основному, но будет корректным при любых последующих вызовах. При компиляции кода и запуске вне GHCi окно всегда плоское.

Это ошибка, или учебник устарел, или что-то еще мне не хватает?

2 ответа

Из ваших комментариев выше, это, вероятно, не то, что вы хотите, но для справки...

Вместо установки размера вы можете установить минимальный размер:

set f [layout := minsize (sz 300 200) $ widget quit]

Вы можете сделать это так же, как и при использовании wxWidgets в C++, то есть с макетами.

Например, вы можете использовать коробку Sizer:

module Main where

import Data.Bits

import Graphics.UI.WX
import Graphics.UI.WXCore.WxcDefs
import Graphics.UI.WXCore.Frame
import Graphics.UI.WXCore.WxcClassesAL
import Graphics.UI.WXCore.WxcClassesMZ
import Graphics.UI.WXCore.WxcTypes

main :: IO ()
main = start simple

simple :: IO ()
simple = do
    hbox <- boxSizerCreate wxHORIZONTAL
    window <- frame [text := "Title"] 
    quitButton <- button window [text := "Quit", on command := close window]
    exitButton <- button window [text := "Exit", on command := close window]
    windowSetSizer window hbox
    sizerAddWindow hbox exitButton 1 (wxEXPAND .|. wxALL) 5 ptrNull
    sizerAddWindow hbox quitButton 1 (wxEXPAND .|. wxALL) 5 ptrNull
    frameCenter window
    return ()
Другие вопросы по тегам