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

set p [layout := ...ステートメントでpのレイアウトを指定し、それを使用法とともに破棄しcontainer p glueます。

containerの2番目のパラメーターはコンテナーのレイアウトです。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後でメインフレームにさらに多くのものを追加するのが簡単に思えるからです。

于 2012-08-16T03:24:09.403 に答える