1

在安装了 WxHaskell 和 gtk2hs 之后,我正在玩弄它们中的哪一个。对于 WxHaskell,我正在研究haskell.org 上 WxHaskell的文档。以下第一个示例来自“快速入门”部分:

 -- 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 会话,它将再次“平坦”,并且在第一次调用 main 时不包括按钮,但在任何后续调用中都会更正。当编译代码并在 GHCi 之外运行时,窗口总是平坦的。

这是一个错误还是教程已过时或我缺少其他东西?

4

2 回答 2

3

从您上面的评论中,这可能不是您想要的,但仅供参考...

您可以设置最小尺寸,而不是设置尺寸:

set f [layout := minsize (sz 300 200) $ widget quit]
于 2013-02-22T11:59:16.873 回答
1

您可以像在 C++ 中使用 wxWidgets 一样执行此操作,即使用布局。

例如,您可以使用 box 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 ()
于 2014-04-19T02:32:39.793 回答