Home > Gtk3, PyGObject, python > PyGObject: Gtk.Box

PyGObject: Gtk.Box

13 Aprile 2020

torna all’indice appunti

Box

Il widget Gtk.Box è un widget che permette di impacchettare i widgets orizzontalmente o
verticalmente a seconda di come è stata settata la property “orientation”.
All’interno del box verrà allocata la stessa dimensione per tutti i widgets contenuti.
I widget verranno inseriti da sinistra verso destra o dall’alto verso il basso, se verrà
utilizzato il metodo pack_start(), o viceversa da destra verso sinistra e dal
basso verso l’alto, se verrà utilizzato il metodo pack_end().
Se non vogliamo che lo stesso quantitativo di spazio sia garantito a tutti i widgets del box,
possiamo chiamare il metodo Gtk.Box.set_homogeneous(False).

Per creare una Box si utilizza il costruttore Gtk.Box(*args, **kwargs).

Le properties più significative sono:

Name Type Flags Short Description
baseline-position Gtk.BaselinePosition r/w/en La posizione della baseline dei widget allineati in caso di spazio extra disponibile
homogeneous bool r/w/en se i children devono avere la stessa dimensione
spacing int r/w/en lo spazio tra i children

Le properties relative ai chidren contenuti nel Gtk.Box, sono:

Name Type Default Flags Short Description
expand bool False r/w se i children devono ricevere spazio extra quando il parent aumenta
fill bool True r/w se lo spazio extra dato al child viene usato dallo stesso o come padding
pack-type Gtk.PackType Gtk.PackType.START r/w un Gtk.PackType che indica se il child è impacchettato con riferimento al parent “start” o “end”
padding int 0 r/w Spazio extra da mettere tra il child e i suoi vicini, in pixels
position int 0 r/w L’indice della posizione del child nel parent

Ovviamente è possibile settare i parametri del widget anche successivamente alla sua costruzione,
con i soliti metodi getter e setter get_property(property_name) e
set_property(property_name, property_value):

 
>>> import gi
... gi.require_version('Gtk', '3.0')
... from gi.repository import Gtk
>>> box = Gtk.Box(spacing=6)
>>> box.set_property("spacing", 10)
>>> box.get_property("spacing")
10

oppure con i metodi getter e setter specifici get_*property_name*() e
set_*property_name*(value):

 
>>> box.get_homogeneous()
False
>>> box.set_homogeneous(True)
>>> box.get_homogeneous()
True

Metodi

Di seguito i metodi utilizzabili con il widget Gtk.Box:

new(orientation, spacing)

Il metodo costruttore che crea un nuovo Gtk.Box.
Parametri:
orientation: l’oggetto Gtk.Orientation che definisce il tipo di
orientamento del box. Può essere Gtk.Orientation.VERTICAL o Gtk.Orientation.VERTICAL;
spacing: i pixels di spazio tra un widget e l’altro nel box;

get_baseline_position()

Ritorna l’oggetto Gtk.BaselinePosition settato con il metodo Gtk.Box.set_baseline_position().

get_center_widget()

Ritorna il widget centrale o None in caso non sia stato settato.

get_homogeneous()

Ritorna True se il box è homogeneous, ovvero se riserva lo stesso spazio per
tutti i children.

get_spacing()

Ritorna il valore della property “spacing”, ovvero lo spazio tra un child e l’altro nel box.

pack_end(child, expand, fill, padding)

Aggiunge un child (child) al box con direzione da destra verso sinistra, in caso di box
orizzontale, o dal basso verso l’alto, in caso di verticale.
Se un child è già presente, viene aggiunto alla sua sinistra (box orizzontale), o sopra (box verticale).
Parametri:
child: l’oggetto Gtk.Widget da aggiungere al box;
expand: un boolean che settato a True, permette al widget di
prendersi lo spazio extra del box, o di dividerselo con gli altri child con lo stesso settaggio;
fill: un boolean che settato a True, riempie lo spazio extra dedicatogli
con l’opzione expand=True, invece che centrarsi nel padding. Se expand=False, questo settaggio
non ha effetto.
padding: i pixels di extra spazio da mettere tra un child e i vicini;

pack_start(child, expand, fill, padding)

Aggiunge un child (child) al box con direzione sinistra verso destra, in caso di box orizzontale,
o dall’alto verso il basso, in caso di verticale.
Se un child è già presente, viene aggiunto alla sua destra (box orizzontale), o sotto (box verticale).
Parametri:
child: l’oggetto Gtk.Widget da aggiungere al box;
expand: un boolean che settato a True, permette al widget di prendersi
lo spazio extra del box, o di dividerselo con gli altri child con il mesdesimo settaggio;
fill: un boolean che settato a True, riempie lo spazio extra dedicatogli
con l’opzione expand=True, invece che centrarsi nel padding.
Se expand=False, questo settaggio non ha effetto.
padding: un intero che indica i pixels di extra spazio da mettere
tra un child e i propri vicini;

query_child_packing(child)

Ritorna una namedtuple con i parametri relativi all’impacchettamento di un widget nel box.

>>> for label in ("YES", "NO", "QUIT"):
...     button = Gtk.Button.new_with_label(label)
...     box.pack_start(button, True, True, 0)
>>> box.query_child_packing(button)
(expand=True, fill=True, padding=0, pack_type=<enum GTK_PACK_START of type Gtk.PackType>)

Parametri:
child: l’oggetto Gtk.Widget del quale vogliamo sapere le informazioni
relative all’impacchettamento nel box;

reorder_child(child, position)

Muove il child (Gtk.Widget) nella nuova posizione indicata da “position”.
Parametri:
child: l’oggetto Gtk.Widget da spostare;
position: l’indice (int) della nuova posizione all’interno della
lista dei widgets del box, lista che riguarda l’impacchettamento di tipo Gtk.PackType.START
e Gtk.PackType.END.

set_baseline_position(position)

Setta la posizione della baseline del box (lo spazio lineare contenente i children), quando c’è
più spazio verticale di quello necessario alla baseline stessa.
position: è un Enum di tipo Gtk.BaselinePosition
e può assumere i seguenti valori:
TOP (0): allinea la baseline in alto;
CENTER (1): allinea la baseline al centro dell’extra spazio disponibile;
BOTTOM (2): allinea la baseline in basso;

>>> box.set_baseline_position(Gtk.BaselinePosition.CENTER)
>>> box.get_baseline_position()
<enum GTK_BASELINE_POSITION_CENTER of type Gtk.BaselinePosition>

Parametri:
position: il tipo di baseline position che vogliamo settare;

set_center_widget(widget)

Setta il widget che vogliamo centrare rispetto all’intera larghezza del box.
Parametri:
widget: l’oggetto Gtk.Widget da centrare o None;

set_child_packing(child, expand, fill, padding, pack_type)

Setta il modo con cui viene impacchettato il widget, all’interno del box.
Parametri:
child: l’oggetto Gtk.Widget per il quale vogliamo settare l’impacchettamento;
expand: un boolean che settato a True, permette al widget di prendersi
lo spazio extra del box, o di dividerselo con gli altri child con il mesdesimo settaggio;
fill: un boolean che settato a True, riempie lo spazio extra dedicatogli
con l’opzione expand=True, invece che centrarsi nel padding.
Se expand=False, questo settaggio non ha effetto.
padding: un intero che indica i pixels di extra spazio da mettere
tra un child e i propri vicini;
pack_type: un Enum di tipo Gtk.PackType
che indica il lato di inserimento del widget, se da sinistra/alto verso destra/basso o viceversa.
Può assumere i seguenti valori:
START (0): l’impacchettamento va da sinistra verso destra e dall’alto verso il basso;
END (1): l’impacchettamento va da destra verso sinistra e dal basso verso l’alto;

set_homogeneous(homogeneous)

Setta la property “homogeneous” che specifica se lo spazio nel box deve essere distribuito in
maniera equa su tutti i children.
Parametri:
homogeneous: il boolean che settato a True, alloca lo spazio del box
in maniera identica su tutti i children;

set_spacing(spacing)

Setta la property “spacing” del box, ovvero la distanza in pixel, tra un child e l’altro,
all’interno del box.
Parametri:
spacing: l’intero che indica i pixel di spazio da interporre tra un widget e l’altro nel box;

Di seguito un codice d’esempio:

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


class GWindow(Gtk.Window):
    def __init__(self):
        super().__init__(title="Box example")

        self.box = Gtk.Box(spacing=6)
        self.box.set_homogeneous(True)
        for label in ("yellow", "red", "black", "blue", "white"):
            button = Gtk.Button(label=label)
            button.connect("clicked", self.on_button_clicked)
            self.box.pack_start(button, True, True, 0)
        self.add(self.box)

    @staticmethod
    def on_button_clicked(button):
        print("INFO: '%s' button clicked!" % button.get_label())


if __name__ == "__main__":
    win = GWindow()
    win.connect("destroy", Gtk.main_quit)
    win.show_all()
    Gtk.main()

link di riferimento:

torna all’indice degli appunti
Gtk3 Box

Categorie:Gtk3, PyGObject, python Tag: , ,
I commenti sono chiusi.