1

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

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]
4

1 回答 1

2

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

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

您应该(最简单)替换container p gluewidget 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

于 2012-08-16T03:24:09.403 回答