Question

Y at-il une façon Gtk + d'empiler un widget sur le dessus d'une autre - sans compter GtkFixed? GtkFixed ne fonctionne pas bien pour deux raisons: 1). J'ai besoin pour Z, et 2) je besoin d'un widget pour étirer et remplir l'espace fourni

Était-ce utile?

La solution

Je ne pense pas qu'il y ait un récipient approprié dans la norme GTK. Je sous-classe Gtk :: fixe ... il est toujours le plus proche, vous pouvez obtenir, et si vous utilisez gtkmm alors le sous-classement ne devrait pas être très difficult¹. Ensuite, vous pouvez contrôler les dimensions de tous les widgets, stretching un enfant choisi pour remplir l'espace.

Pour contrôler l'axe Z vous aurez probablement besoin de manipuler les fenêtres widget X - vérifier la documentation sur le sujet GDK GDK windows². Je me souviens que dans PyGTK chaque widget a la propriété gtk.Widget.window, je suppose que la même chose est pour gtkmm. Cela suppose que tous vos widgets enfants ont des fenêtres X, si F.E. vous aurez besoin d'envelopper Gtk de l'étiquette à l'intérieur Gtk :: EventBox.

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

Autres conseils

J'ai eu cette question exacte à l'aide d'un Gtk :: fixe (en fait gtk.Fixed - pygtk - mais je pense qu'il est tout de même en dessous) et j'ai pu gérer assez facilement en manipulant la fenêtre de chaque widget de

Dans mon cas, les widgets sont déjà des cas EventBox, et je juste besoin de faire en sorte que celui que je traînais autour était au-dessus, parce que sinon il a glissé sous les autres, qui avaient l'air tout à fait tort. La solution était aussi simple que d'appeler « widget.window.raise_ () » pour augmenter la fenêtre sous-jacente du widget lorsque le widget a été cliqué pour commencer le glisser.

Je suis fondamentalement juste réaffirmer que la réponse précédente fonctionne, mais je voulais souligner que c'est en fait assez facile. Il semble que vous devrez peut-être créer des EventBoxes pour tenir vos widgets, mais après qu'il devrait fonctionner.

Vous pouvez voir le code que je travaillais sur http://github.com/divegeek/BlockHead

J'ai pu faire exactement cela -

  

affichage un widget de remplissage tout l'espace, et puis un autre sur le dessus à un emplacement fixe, à la fois visible en même temps

dans GTK2 en utilisant GtkFixed, l'élaboration d'un ordre d'insertion approprié, et (d'abord inséré - haut - bas, dernier inséré) - le plus important !! - forçant GtkFixed avoir sa propre fenêtre:

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

Si vous ne le faites pas set_has_window (f, 1), toutes les fenêtres enfants seront insérés dans certains widget parent / fenêtre (voir gtk_fixed_realize () dans gtkfixed.c), et cela pourrait créer désordre z ordre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top