Question

J'ai besoin d'utiliser Gtk2 pour un projet.J'utiliserai python/ruby pour cela.Le problème est que l’emballage me semble un peu mystique.J'ai essayé d'utiliser une VBox pour pouvoir avoir les widgets suivants dans ma fenêtre (dans l'ordre suivant) :

  • barre de menu
  • barre d'outils
  • contrôle d'affichage/éditeur de texte

J'ai réussi à "deviner" mon chemin avec pack_start et obtenir la mise en page dont j'ai besoin, mais j'aimerais pouvoir la comprendre.La documentation à Rubis Gtk2 semble beaucoup trop peu intuitif (tout comme celui de python, puisque c'est le même, écrit uniquement pour python), pourriez-vous nous éclairer ?

Aussi, set_size_request ne fonctionne pas toujours lorsque j'ajoute un composant avec pack_start.Pourquoi donc ?

Était-ce utile?

La solution

L'emballage de la boîte est vraiment simple, alors peut-être que votre échec à le comprendre est dû au fait que vous imaginez que c’est plus compliqué qu’il ne l’est.

La disposition est soit verticale (comme un tas de briques), soit horizontale (comme une file d'attente de personnes).Chaque élément de cette mise en page peut se développer ou non.

Horizontale (HBox)

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

Verticale (VBox)

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

Ainsi par exemple, une disposition horizontale (HBox) avec deux boutons, dont le code serait :

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

Maintenant que la valeur par défaut pour l'emballage est d'avoir expand=True, les deux boutons ajoutés à la boîte se développeront et occuperont chacun la moitié de la surface.Quelle que soit la taille du conteneur.Je pense que c'est "extensible".

Widgets extensibles :

[[    widget    ][    widget    ]]

Donc, si vous souhaitez que l'un des boutons ne se développe pas, vous le packerez comme ceci :

box.pack_start(b1, expand=False)

Widget non extensible :

[[widget][        widget        ]]

Le bouton n’occupera alors que l’espace dont il a besoin pour se dessiner :texte + bordures + ombres + images (le cas échéant), etc.Et l'autre bouton s'agrandira pour remplir la zone restante.Normalement, les boutons n'ont pas besoin d'être développés, donc une situation plus réelle est une TextArea que vous voudriez développer pour remplir la fenêtre.

L'autre paramètre qui peut être transmis à pack_start est le paramètre de remplissage, et normalement cela peut être ignoré.Il suffit ici de dire que si expand=False puis le fill Le paramètre est entièrement ignoré (car cela n’a pas de sens dans cette situation).

L'autre chose que vous avez mentionnée est set_size_request.Je dirais généralement que ce n'est pas une bonne idée.Je dis de manière générale, car il y a des situations où vous aurez besoin de l'utiliser.Mais pour quelqu'un qui débute avec une interface utilisateur GTK+, je recommanderais fortement de ne pas l'utiliser.En général, laissez les boîtes et autres conteneurs gérer votre mise en page à votre place.Le set_size_request ne fait pas exactement ce que vous attendez de lui.Cela ne change pas la taille d'un widget, mais simplement la quantité d'espace qu'il demandera.Il peut en utiliser davantage et même s’étirer pour remplir des espaces plus grands.Elle deviendra rarement inférieure à la demande, mais encore une fois, comme il s'agit simplement d'une « demande », il n'y a aucune garantie que la demande sera satisfaite.

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