2 votes

Comment centrer horizontalement un Gtk.Grid à l'intérieur d'un Gtk.Box vertical ?

J'ai une grille contenant des libellés à l'intérieur de cadres pour donner l'apparence d'un tableau. Cette grille est insérée dans une boîte verticale dans laquelle les libellés enfants directs sont correctement centrés (ils sont emballés dans la boîte de la même manière que la grille).

Mon code simplifié est le suivant:

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

window = Gtk.Window()

g = Gtk.Grid()  # ceci devrait être au centre horizontal de la fenêtre
g.attach(Gtk.Label("Ceci devrait être centré mais ce n'est pas le cas."), 0, 0, 1, 1)

b = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
b.pack_start(g, True, False, 0)  # Le même comportement avec: b.pack_start(g, True, True, 0)
b.pack_start(Gtk.Label("Ce libellé est centré comme il se doit. Essayez de redimensionner la fenêtre."), True, False, 0)

window.add(b)

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

et voici l'interface graphique qu'il génère:

Capture d'écran de l'exemple de code.

2voto

José Fonte Points 3347

Vous devez utiliser les propriétés/méthodes d'Alignement et d'Expansion pour définir les comportements des conteneurs enfants.

Avec Gtk.Box, vous avez défini l'expansion comme True et le remplissage comme False pour les deux enfants, mais le premier est un conteneur, Gtk.Grid. Lorsque vous avez ajouté l'étiquette au Grid, vous n'avez pas défini d'indicateurs d'expansion ou de remplissage.

Je ne suis pas sûr de la manière dont vous voulez que les étiquettes se comportent lors du redimensionnement de la fenêtre, mais pour centrer horizontalement l'étiquette qui se trouve à l'intérieur de Gtk.Grid, vous pouvez définir l'expansion horizontale de Gtk.Label comme vrai ou définir l'alignement de Gtk.Grid comme centré.

Exemple - Définition de l'expansion horizontale de Gtk.Label comme True:

g = Gtk.Grid()  # ceci devrait être au centre horizontal de la fenêtre
l = Gtk.Label("Ceci devrait être centré mais ce n'est pas le cas.")
l.set_hexpand(True)
g.attach(l, 0, 0, 1, 1)

Cependant, si vous "agrandissez" la fenêtre verticalement, les étiquettes se sépareront. Je vous suggère d'utiliser Glade et de jouer avec l'expansion et l'alignement des widgets.

Résultat: résultat ui

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X