2009-03-20 4 views
2

J'ai besoin d'utiliser Gtk2 pour un projet. Je vais utiliser python/ruby ​​pour cela. Le problème est que l'emballage me semble un peu mystique. J'ai essayé d'utiliser un VBox pour que je puisse avoir les widgets suivants dans ma fenêtre (dans l'ordre suivant):Quelqu'un peut-il expliquer l'emballage Gtk2?

  • menubar
  • barre d'outils
  • vue
  • texte/éditeur contrôle

Je J'ai réussi à "deviner" mon chemin avec pack_start et obtenir la mise en page dont j'ai besoin, mais j'aimerais pouvoir le comprendre. La documentation au Ruby Gtk2 semble trop peu intuitive (et c'est aussi le cas de Python, puisque c'est la même chose, écrit uniquement pour Python), pourriez-vous nous éclairer?

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

+0

Pour toute personne qui a des difficultés à comprendre les choses dans des documents GTK + spécifiques à une langue, je recommande fortement d'utiliser les documents C principaux qui expliquent complètement chaque fonction sur [developer.gnome.org] (https://developer.gnome.org). – oldtechaa

Répondre

14

Boîte d'emballage est vraiment simple, donc peut-être votre échec à comprendre c'est parce que vous imaginez que c'est plus compliqué que c'est. La disposition est soit verticale (comme un tas de briques) soit horizontale (comme une file d'attente). Chaque élément de cette mise en page peut se développer ou ne peut pas être développé.

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, ces deux boutons ajouter ed à la boîte se développera et ils occuperont chacun la moitié de la zone. Peu importe la taille du conteneur. Je pense à cela comme "extensible".

widgets Expanding:

[[ widget ][ widget ]] 

Donc, si vous voulez un des boutons de ne pas se développer, vous emballer comme ceci:

box.pack_start(b1, expand=False) 

widget de non-expansion:

[[widget][  widget  ]] 

Ensuite, le bouton n'occupe que l'espace dont il a besoin pour se dessiner: texte + bordures + ombres + images (le cas échéant) e Et l'autre bouton va se développer 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 passé à pack_start est le paramètre de remplissage, qui peut normalement être ignoré. Il suffit ici de dire que si expand=False alors le paramètre fill est entièrement ignoré (parce que 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 généralement, parce qu'il y a des situations où vous devrez l'utiliser. Mais pour quelqu'un qui commence par emballer une interface utilisateur GTK +, je recommande fortement de ne pas l'utiliser. En général, laissez les boîtes et autres conteneurs gérer votre mise en page pour vous. 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 plus et peut même s'étirer pour remplir de plus grands espaces. Il deviendra rarement plus petit que la demande, mais encore une fois parce que c'est juste une "demande" il n'y a aucune garantie que la demande sera satisfaite.

Questions connexes