문제

GtkFixed를 계산하지 않고 하나의 위젯을 다른 위젯 위에 쌓는 방법이 Gtk+에 있습니까?GtkFixed는 다음 두 가지 이유로 잘 작동하지 않습니다.1) Z 순서가 필요하고, 2) 제공된 공간을 늘리고 채우려면 하나의 위젯이 필요합니다.

도움이 되었습니까?

해결책

표준 GTK에는 적절한 컨테이너가 없다고 생각합니다.나는 Gtk::Fixed를 하위 클래스로 분류하겠습니다...여전히 얻을 수 있는 가장 가까운 것입니다. gtkmm을 사용하면 서브클래싱이 그리 어렵지 않을 것입니다1.그런 다음 모든 위젯의 크기를 제어하여 선택한 하위 하나를 늘려 공간을 채울 수 있습니다.

Z축을 제어하려면 위젯의 X 창을 조작해야 할 수도 있습니다. GDK 창² 주제에 대한 GDK 문서를 확인하세요.PyGTK에서 각 위젯에는 gtk.Widget.window 속성이 있다는 것을 기억합니다. gtkmm에도 마찬가지인 것 같습니다.이는 모든 하위 위젯에 X 창이 있다고 가정합니다.Gtk::EventBox 안에 Gtk::Label을 래핑해야 합니다.

¹ http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/chapter-customwidgets.html

² http://www.gtkmm.org/docs/gtkmm-2.4/docs/reference/html/classGdk_1_1Window.html#6eef65b862344ad01b01e527f2c39741

다른 팁

나는 gtk :: 고정 (실제로 gtk.fixed -pygtk - 아래에 모두 동일하다고 생각합니다)을 사용 하여이 정확한 문제를 겪었고 각 위젯의 창을 조작하여 쉽게 처리 할 수있었습니다.

제 경우에는 이미 위젯이 이벤트 박스 인스턴스이며, 내가 드래그하고있는 위젯이 맨 위에 있는지 확인해야했습니다. 그렇지 않으면 다른 사람들 아래로 미끄러 져 나갔기 때문에 꽤 잘못 보였습니다. 솔루션은 위젯을 클릭하여 드래그를 시작할 때 위젯의 기본 창을 올리기 위해 "widget.window.raise_ ()를 호출하는 것만 큼 간단했습니다.

그래서 나는 기본적으로 이전 답변이 작동한다는 것을 재확인하지만 실제로는 그것이 실제로 매우 쉽다고 지적하고 싶었습니다. 위젯을 유지하려면 이벤트 상자를 만들어야 할 것 같습니다. 그러나 그 후에는 작동해야합니다.

내가 작업했던 코드를 볼 수 있습니다. http://github.com/divegeek/blockhead

나는 그것을 정확히 할 수 있었다 -

전체 공간을 채우는 하나의 위젯을 표시 한 다음 고정 된 위치에서 상단에 동시에 보입니다.

gtkfixed를 사용하여 GTK2에서 적절한 삽입 순서 (첫 번째 삽입 - 하단, 마지막 삽입 - 상단) 및 - 가장 중요한 것은!! -gtkfixed가 자신의 창을 갖도록 강요 :

`f := gtk_fixed_new();
gtk_widget_set_has_window(f, 1);`

set_has_window (f, 1)를 수행하지 않으면 모든 어린이 창이 일부 상위 위젯/창에 삽입됩니다 (GTK_FIXED_REALIZE (GTKFIXED.C).

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