2009-03-20 6 views
2

프로젝트에 Gtk2를 사용해야합니다. 나는 파이썬/루비를 사용할 것이다. 문제는 포장이 나에게 신비로운 것처럼 보입니다. 나는 (다음과 같은 순서로) 내 창에서 다음 위젯을 가질 수 있도록 중 VBOX를 사용하여 시도 :누군가 Gtk2 포장을 설명 할 수 있습니까?

  • 도구 모음을
  • 나 '도구 모음
  • 텍스트보기/편집 제어

pack_start으로 내 방식을 "추측"하고 내가 원하는 레이아웃을 얻을 수 있었지만 이해할 수 있기를 바랍니다. Ruby Gtk2의 문서는 너무 직관적이지 않습니다. (파이썬과 동일하기 때문에 파이썬 하나입니다.) 빛을 비추어 줄 수 있습니까?

또한 pack_start으로 구성 요소를 추가 할 때 set_size_request이 작동하지 않을 수 있습니다. 왜 그런가요?

+0

언어 별 GTK + 문서의 내용을 이해하는 데 문제가있는 사람은 [developer.gnome.org] (https://developer.gnome.org)에서 각 기능을 완전히 설명하는 기본 C 문서를 사용하는 것이 좋습니다. – oldtechaa

답변

14

상자 포장은 입니다. 실제로는입니다. 따라서 이해하기가 쉽지 않을 수 있습니다.

레이아웃은 세로 (벽돌 더미처럼) 또는 가로 (사람 큐처럼)입니다. 해당 레이아웃의 각 요소가 확장되거나 확장 될 수 없습니다.

수평 (HBox의)

[widget][widget][widget][widget] 

수직 (중 VBOX)

[widget] 
[widget] 
[widget] 
[widget] 

그래서 예를 들어, 수평 레이아웃 두 개의 버튼 (HBox의)는 코드가 될 것이다 :

import gtk 
box = gtk.HBox() 
b1 = gtk.Button('button1') 
b2 = gtk.Button('button2') 
box.pack_start(b1) 
box.pack_start(b2) 

패킹의 기본값은 expand=True이므로 두 버튼 모두 상자가 열리면 영역의 절반을 차지하게됩니다. 용기의 크기가 어떻든간에. 나는 이것을 "stretchy"라고 생각합니다.

확장 위젯 : 당신이 확장하지 않도록 버튼 중 하나를 원하는 경우

[[ widget ][ widget ]] 

그래서, 당신은 이런 식으로 포장됩니다

box.pack_start(b1, expand=False) 

비 확장 위젯 :

[[widget][  widget  ]] 

그러면 버튼은 그려야 할 공간을 차지합니다 : 텍스트 + 테두리 + 그림자 + ​​이미지 (있는 경우) e 나머지 버튼을 채우기 위해 다른 버튼이 펼쳐집니다. 일반적으로 버튼을 확장 할 필요가 없으므로 실제 상황은 창을 채우기 위해 확장하려는 TextArea입니다.

pack_start에 전달할 수있는 다른 매개 변수는 채우기 매개 변수이며 일반적으로 무시할 수 있습니다. expand=False이면 fill 매개 변수는 완전히 무시됩니다 (해당 상황에서 의미가 없으므로).

다른 언급은 set_size_request입니다. 나는 이것이 일반적으로 좋지 않다고 말한다. 나는 당신이 그것을 사용해야 할 상황이 있기 때문에 일반적으로 말합니다. 그러나 GTK + 사용자 인터페이스를 포장하는 것으로 시작하는 사람은 사용하지 않을 것을 강력히 권합니다. 일반적으로 상자 및 기타 컨테이너가 레이아웃을 처리하도록합니다. set_size_request은 기대했던 것과 정확히 일치하지 않습니다. 그것은 위젯의 크기를 변경하지 않고 요청할 공간의 양만 변경합니다. 더 많은 것을 사용할 수도 있고 더 큰 공간을 채우기 위해 늘릴 수도 있습니다. 그것은 거의 요청보다 작지는 않을 것이지만, 단지 "요청"이기 때문에 요구가 충족 될 것이라는 보장이 없다.