2017-08-08 7 views
1

J'ai une grille contenant des étiquettes dans les cadres pour que cela ressemble à une table. Cette grille est insérée dans une boîte verticale dans laquelle les étiquettes enfant directes sont centrées correctement (elles sont emballées dans la boîte de la même manière que la grille).Comment centrer horizontalement un Gtk.Grid dans un Gtk.Box vertical?

Mon code simplifié est ceci:

import gi 
gi.require_version("Gtk", "3.0") 
from gi.repository import Gtk 

window = Gtk.Window() 

g = Gtk.Grid() # this should be in the horizontal center of the window 
g.attach(Gtk.Label("This should be centered but it is not."), 0, 0, 1, 1) 

b = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) 
b.pack_start(g, True, False, 0) # The same behavior with: b.pack_start(g, True, True, 0) 
b.pack_start(Gtk.Label("This label is centered as it should be. Try to resize the window."), True, False, 0) 

window.add(b) 

window.connect("delete-event", Gtk.main_quit) 
window.show_all() 
Gtk.main() 

ce qui est l'interface graphique, il produit:

Screenshot of the code example.

Répondre

1

Vous devez utiliser l'alignement et développez les propriétés/méthodes pour définir les comportements des conteneurs enfants. Avec Gtk.Box vous avez défini développer comme True et Fill comme False pour les deux enfants, mais le premier est un conteneur, Gtk.Grid. Lorsque vous avez ajouté l'étiquette à la grille, vous n'avez défini aucun indicateur d'expansion ou de remplissage.

Vous ne savez pas comment vous voulez que les étiquettes se comportent lors du redimensionnement de la fenêtre mais que l'étiquette qui se trouve à l'intérieur de Gtk.Grid soit centrée horizontalement, vous pouvez définir Gtk.Label horizontal expand comme vrai ou Gtk. Alignement de la grille comme centré.

Exemple - Réglage Gtk.Label horizontal dilatent vrai:

g = Gtk.Grid() # this should be in the horizontal center of the window 
l = Gtk.Label("This should be centered but it is not.") 
l.set_hexpand(True) 
g.attach(l, 0, 0, 1, 1) 

Cependant, si vous « pousser » la fenêtre verticale, les étiquettes se séparera les uns des autres. Je suggérerais que vous utilisiez glade et jouiez avec l'expansion et l'alignement du widget.

Résultat: result ui