문제

프로젝트에 Gtk2를 사용해야 합니다.저는 Python/Ruby를 사용할 것입니다.문제는 포장이 나에게 신비롭게 보인다는 것입니다.내 창에 다음 위젯을 가질 수 있도록 VBox를 사용해 보았습니다 (다음 순서로).

  • 메뉴바
  • 도구 모음
  • 텍스트 보기/편집기 제어

나는 내 방식을 '추측'하는 데 성공했습니다. pack_start 필요한 레이아웃을 얻을 수 있지만 이해할 수 있기를 바랍니다.문서는 루비 Gtk2 너무 직관적이지 않은 것 같습니다. (파이썬도 마찬가지입니다. 동일하기 때문에 파이썬용으로만 작성되었습니다.) 좀 밝힐 수 있습니까?

또한, set_size_request 구성 요소를 추가하면 항상 작동하지 않습니다. pack_start.왜 그런 겁니까 ?

도움이 되었습니까?

해결책

박스포장은 정말 아마도 당신이 그것을 이해하지 못하는 것은 그것이 실제보다 더 복잡하다고 상상하기 때문일 것입니다.

레이아웃은 수직(벽돌 더미처럼) 또는 수평(사람들이 줄을 서 있는 것처럼)입니다.해당 레이아웃의 각 요소는 확장되거나 확장될 수 없습니다.

수평(H박스)

[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, 상자에 추가된 두 버튼 모두 확장되어 각각 영역의 절반을 차지하게 됩니다.용기의 크기는 상관없습니다.나는 이것을 "신축성"이라고 생각합니다.

위젯 확장:

[[    widget    ][    widget    ]]

따라서 버튼 중 하나가 확장되지 않도록 하려면 다음과 같이 압축하면 됩니다.

box.pack_start(b1, expand=False)

비확장 위젯:

[[widget][        widget        ]]

그러면 버튼은 자체적으로 그리는 데 필요한 공간만 차지하게 됩니다.텍스트 + 테두리 + 그림자 + ​​이미지(있는 경우) 등그러면 다른 버튼이 확장되어 나머지 영역을 채웁니다.일반적으로 버튼은 확장할 필요가 없으므로 보다 실제적인 상황은 창을 채우기 위해 확장하려는 TextArea입니다.

전달할 수 있는 다른 매개변수 pack_start 채우기 매개변수이며 일반적으로 무시할 수 있습니다.여기서는 다음과 같이 말하면 충분합니다. expand=False 그런 다음 fill 매개변수는 완전히 무시됩니다(해당 상황에서는 의미가 없기 때문입니다).

당신이 언급한 또 다른 점은 set_size_request.나는 일반적으로 이것이 좋은 생각이 아니라고 말하고 싶습니다.나는 일반적으로 그것을 사용해야 하는 상황이 있기 때문에 이렇게 말합니다.그러나 GTK+ 사용자 인터페이스 패키징을 시작하는 사람에게는 이를 사용하지 않는 것이 좋습니다.일반적으로 상자와 기타 컨테이너가 레이아웃을 처리하도록 하세요.그만큼 set_size_request 기대하는 대로 정확하게 수행되지는 않습니다.위젯의 크기는 변경되지 않지만 요청하는 공간의 양만 변경됩니다.더 많이 사용할 수도 있고 더 큰 공간을 채우기 위해 늘어날 수도 있습니다.요청보다 작아지는 경우는 거의 없지만, 이는 단지 "요청"이므로 요청이 이행될 것이라는 보장은 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top