2012-05-13 3 views
1

전체 너비를 채우기 위해 텍스트 항목을 채우려고합니다. 항목이 프레임에 직접 붙여지면 잘 작동하지만 패널에 배치하면 기본값으로 되돌립니다 크기. 또한 '박스형'레이아웃 조합 텍스트가 사라집니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?wxhaskell의 레이아웃 결합 자

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] 

답변

2

당신은 container p glue 사용과 그것을 버리고 다음 set p [layout := ... 문에서 페이지의 레이아웃을 지정하고 있습니다.

(container의 두 번째 매개 변수는 컨테이너의 레이아웃입니다 glue는 레이아웃,하지만 패널에 대한 분별있는 것입니다..)

당신은 하나 (간단한)이 같은 widget p으로 container p glue를 교체해야합니다 :

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] 

또는 끝에서 컨테이너 expresssion에 모든 레이아웃 코드를 이동 :

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 나중에 선호합니다.

관련 문제