Frage

Gibt es eine Möglichkeit in Gtk + ein Widget auf dem anderen zu stapeln - nicht GtkFixed zu zählen? GtkFixed nicht gut aus zwei Gründen arbeiten: 1.) Ich brauche Z Ordnung, und 2) Ich brauche ein Widget zu strecken und vorgesehene Stelle zu füllen

War es hilfreich?

Lösung

Ich glaube nicht, dass es ein richtiger Behälter in Standard GTK ist. Ich würde Gtk Unterklasse :: Feste ... es immer noch in der Nähe ist, die Sie bekommen können, und wenn Sie gtkmm verwenden, dann sollten Subklassen nicht sehr difficult¹ sein. Dann können Sie die Abmessungen aller Widgets steuern, ein ausgewähltes Kind Stretching Raum zu füllen.

Um Z-Achsen-Steuerung werden Sie wahrscheinlich Widgets X-Windows manipulieren müssen - überprüfen GDK Dokumentation Thema GDK windows². Ich erinnere mich, dass in PyGTK jedes Widget gtk.Widget.window Eigenschaft hat, ich denke, dass dies auch für gtkmm ist. Dies setzt voraus, dass alle Kind-Widgets X Fenster haben, so F. E. Sie Gtk :: Label-innen Gtk :: EventBox wickeln müssen.

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

Andere Tipps

Ich hatte genau dieses Problem mit einem Gtk :: Fest (eigentlich gtk.Fixed - pygtk - aber ich denke, es ist alles das gleiche unten), und ich konnte es ganz leicht zu handhaben, indem jeder Widget Fenster Manipulation

In meinem Fall sind die Widgets bereits EventBox Instanzen, und ich brauchte nur um sicher zu stellen, dass die, die ich um oben war schleppte, da es sonst unter anderen geschoben, was ganz falsch aussah. Die Lösung war so einfach wie der Aufruf von „widget.window.raise_ ()“ das Widgets zugrunde liegende Fenster zu erhöhen, wenn das Widget angeklickt wurde den Drag zu beginnen.

So bin ich im Grunde bekräftigt nur, dass die vorherige Antwort funktioniert, aber ich wollte darauf hinweisen, dass es eigentlich ziemlich einfach ist. Es klingt wie Sie einige EventBoxes erstellen müssen können Ihre Widgets zu halten, aber nach, dass es sollte einfach funktionieren.

Sie können den Code sehe ich arbeitete unter http://github.com/divegeek/BlockHead

Ich war in der Lage zu tun genau das -

  

Display ein Widget den gesamten Raum füllt, und eine andere dann oben an einem festen Standort, sowohl sichtbare zugleich

in gtk2 von GtkFixed verwenden, arbeitet einen geeigneten Auftrag aus (zuerst eingeführt - Boden, zuletzt eingefügt - oben) und - vor allem !! - zwingt GtkFixed es ist eigenes Fenster zu:

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

Wenn Sie nicht set_has_window tun (f, 1), alle Kinder Fenster werden in eine übergeordnete Widget / Fenster eingefügt werden (siehe gtk_fixed_realize () in gtkfixed.c), und das könnte z Ordnung Chaos schaffen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top