【问题标题】:Layout combinators in wxhaskellhaskell 中的布局组合器
【发布时间】:2012-05-13 16:13:21
【问题描述】:

我正在尝试填充文本条目以填充整个宽度,如果将条目直接放入框架中,这可以正常工作,但如果将它们放入面板中,它们会恢复为默认大小。 “盒装”布局组合器文本也消失了。我做错了什么?

import Graphics.UI.WX

main = start gui

gui = do
  f <- frame []
  p <- panel f []
  xcoord <- entry p []
  ycoord <- entry p []
  set p [layout := fill $ boxed "foo" $
      grid 5 5 [
          [floatRight $ label "x   coordinate", hfill $ widget xcoord]
        , [floatRight $ label "y coordinate", hfill $ widget ycoord]
      ]
    ]
  set f [layout := fill $ container p glue]

【问题讨论】:

    标签: user-interface haskell wxhaskell


    【解决方案1】:

    您在 set p [layout := ... 语句中指定 p 的布局,然后将其与 container p glue 用法一起丢弃。

    container 的第二个参数是容器的布局。glue 是布局,但对于面板来说不是一个明智的布局。)

    您应该(最简单)将container p glue 替换为widget p,如下所示:

    import Graphics.UI.WX
    
    main = start gui
    
    gui = do
      f <- frame []
      p <- panel f []
      xcoord <- entry p []
      ycoord <- entry p []
      set p [layout := boxed "foo" $
          grid 5 5 [
              [floatRight $ label "x   coordinate", hfill $ widget xcoord]
            , [floatRight $ label "y coordinate", hfill $ widget ycoord]
          ]
        ]
      set f [layout := fill $ widget p]
    

    或将所有布局代码移到最后的容器表达式中:

    import Graphics.UI.WX
    
    main = start gui
    
    gui = do
      f <- frame []
      p <- panel f []
      xcoord <- entry p []
      ycoord <- entry p []
      set f [layout := fill $ container p $ boxed "foo" $
          grid 5 5 [
              [floatRight $ label "x   coordinate", hfill $ widget xcoord]
            , [floatRight $ label "y coordinate", hfill $ widget ycoord]
          ]]
    

    但我更喜欢第一个,因为它对我来说感觉更干净,并且以后在您的主机f 中添加更多东西似乎更容易。

    【讨论】:

      猜你喜欢
      • 2014-05-30
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-20
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      相关资源
      最近更新 更多