【问题标题】:wxHaskell: Initial frame size too smallwxHaskell:初始帧大小太小
【发布时间】:2013-02-21 12:06:48
【问题描述】:

在安装了 WxHaskell 和 gtk2hs 之后,我正在玩弄它们中的哪一个。对于 WxHaskell,我正在阅读WxHaskell at 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 会话,它将再次“平坦”,并且在第一次调用 main 时不包括按钮,但在任何后续调用中都会更正。当编译代码并在 GHCi 之外运行时,窗口总是平坦的。

这是一个错误还是教程已过时或我遗漏了什么?

【问题讨论】:

  • wxHaskell 和 GHCi 存在已知问题:haskell.org/haskellwiki/WxHaskell/FAQ
  • 或者你的意思是窗口总是太小?如果是这样,您可以添加 minsize 布局。
  • 在 GHCi 和使用 GHC 编译代码时都会发生这种情况。我期望获得与链接示例显示中的屏幕截图相同的行为。添加显式大小,例如。使用 clientSize := sz 150 100 窗口的大小会相应地调整,但是对于以后的实际代码来说,隐式地调整 GUI 元素的大小会很好。
  • 你可以试试windowReLayout...不过我对wxWindows不是很熟悉:hackage.haskell.org/packages/archive/wxcore/latest/doc/html/…

标签: haskell wxhaskell


【解决方案1】:

从你上面的 cmets 来看,这可能不是你想要的,但供参考......

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

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

【讨论】:

    【解决方案2】:

    您可以像在 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 ()
    

    【讨论】:

      猜你喜欢
      • 2016-07-27
      • 1970-01-01
      • 2010-12-29
      • 2017-11-21
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 2016-09-10
      • 1970-01-01
      相关资源
      最近更新 更多