Home > Gtk3, PyGObject, python > PyGObject: Gtk.Stack, Gtk.StackSwitcher

PyGObject: Gtk.Stack, Gtk.StackSwitcher

13 Aprile 2020

torna all’indice degli appunti

Stack

Il widget Gtk.Stack è un contenitore che mostra i suoi widget
uno alla volta. Le transizioni tra una “pagina” e l’altra, possono essere a scorrimento o sfumate
a seconda della preferenza. Tale animazione può essere settata con il metodo
Gtk.Stack.set_transition_type() e rispetta il settaggio “gtk-enable-animations” (Gtk.Setting).

Le properties principali del widget-parent contenitore sono:

Name Type Flags Short Description
hhomogeneous bool r/w/en Se il sizing orizzontale è omogeneo
homogeneous bool r/w/en Se il sizing è Homogeneous
interpolate-size bool r/w/en Se la larghezza debba o meno cambiare passando da un child all’altro con size diversi
transition-duration int r/w/en La durata dell’animazione in millisecondi
transition-running bool r Se la transizione è in corso d’opera o meno
transition-type Gtk.StackTransitionType r/w/en Il tipo di animazione usata per la transizione
vhomogeneous bool r/w/en Se il sizing Verticale è omogeneo
visible-child Gtk.Widget r/w/en il widget attualmente visibile nello stack
visible-child-name str r/w/en Il nome del widget attualmente visibile nello stack

Le properties principali dei child widgets sono:

Name Type Flags Short Description
icon-name str None r/w Il nome dell’icona del child widget
name str None r/w Il nome del child widget
needs-attention bool False r/w Se il child widget necessita attenzione
position int 0 r/w L’indice del child widget nel parent widget
title str None r/w Il titolo del child widget

Metodi

Oltre ai soliti getter e setter relativi alle properties dell’oggetto Gtk.Stack, i principali
metodi sono:

new()

Crea un nuovo widget contenitore Gtk.Stack.

>>> import gi
... gi.require_version('Gtk', '3.0')
... from gi.repository import Gtk
... 
>>> stack = Gtk.Stack.new()

add_named(child, name)

Aggiunge una child-page allo stack. Il child è identificato dal nome.
Parametri:
child: il child (Gtk.Widget) da aggiungere allo stack;
name: il nome che identifica il child aggiunto allo stack;

add_titled(child, name, title)

Aggiunge una child-page allo stack. Il child è identificato dal nome.
Il titolo title sarà utilizzato dal Gtk.StackSwitcher (trattato più avanti)
per rappresentare il child nella tab bar.
Parametri:
child: il child (Gtk.Widget) da aggiungere allo stack;
name: il nome che identifica il child aggiunto allo stack;
title: il title da utilizzare per il child;

>>> label_1 = Gtk.Label("First page label")
>>> stack.add_titled(child=label_1, name="label_1", title="First page label")

get_child_by_name(name)

Ritorna il child widget che ha il nome passato come argomento, altrimenti None
se non ci sono children con quel nome.
Parametri:
name: il nome del child widget che vogliamo recuperare dallo stack;

>>> stack.get_child_by_name("label_1")
<Gtk.Label object at 0x0000000004f47400 (GtkLabel at 0x0000000004971260)>

get_hhomogeneous()

Ritorna True se lo stack ha un sizing orizzontale omogeneo.

get_homogeneous()

Ritorna True se lo stack ha un sizing omogeneo (sia orizzontale che verticale).

get_interpolate_size()

Ritorna True se lo stack esegue l’interpolazione tra le dimensioni dei children,
quando avviene lo switch tra le pagine.

get_transition_duration()

Ritorna la durata della transizione espressa in millisecondi.

get_transition_running()

Ritorna True se nello stack attualmente sta avvenendo una transizione

get_transition_type()

Ritorna il tipo di animazione (Gtk.StackTransitionType) che sarà usata nella transizione tra pagine.

get_vhomogeneous()

Ritorna True se lo stack ha un sizing verticale omogeneo.

get_visible_child()

Ritorna il child visibile corrente nello stack, o None, se non ci sono children visibili.

get_visible_child_name()

Ritorna il nome del child visibile corrente nello stack, o None se non ci sono children visibili.

set_hhomogeneous(hhomogeneous)

Setta se il Gtk.Stack debba avere un sizing orizzontale omogeneo o no. Se settiamo a True,
lo stack richiederà la stessa larghezza per tutti i suoi child widgets, altrimenti lo stack potrà
cambiare larghezza quando un child widget differente diventerà visibile.
Parametri:
hhomogeneous: il boolean che settato a True rende lo stack omogeneo orizzontalmente;

set_homogeneous(homogeneous)
Setta se il Gtk.Stack debba avere un sizing omogeneo (sia verticale che orizzontale) o no.
Se settiamo a True, lo stack richiederà lo stesso spazio per tutti i suoi child
widgets, altrimenti lo stack potrà cambiare dimensioni quando un child widget differente diventerà
visibile.
Parametri:
homogeneous: il boolean che settato a True rende
lo stack omogeneo (sia orizzontalmente che verticalmente);

set_interpolate_size(interpolate_size)

Setta se lo stack interpolerà le sue dimensioni quando cambia il child visibile.
Se la property di Gtk.Stack “:interpolate-size”=True, lo stack stesso interpolerà le proprie
dimensioni, tra quelle attuali e quelle che prenderà dopo la modifica del child visibile,
in accordo con la durata della transizione.
Parametri:
interpolate_size: Il boolean che settato a True
esegue l’interpolazione;

set_transition_duration(duration)

Setta la durata della transizione tra le “pagine”.
Parametri:
duration: la durata della transizione in millisecondi;

set_transition_type(transition)

Setta il tipo di animazione che sarà usata per la transizione tra pagine, nello stack.
Sono disponibili diversi tipi di animazioni a scorrimento e sfumate.
Parametri:
transition: l’oggetto Gtk.StackTransitionType
corrispondente all’animazione desiderata.

set_vhomogeneous(vhomogeneous)
Setta se il Gtk.Stack debba avere un sizing verticale omogeneo o no. Se settiamo a True,
lo stack richiederà la stessa altezza per tutti i suoi child widgets, altrimenti lo stack potrà
cambiare altezza quando un child widget differente diventerà visibile.
Parametri:
vhomogeneous: il boolean che settato a True rende lo stack omogeneo verticalmente;

set_visible_child(child)
Rende un widget il child visibile dello stack.
Se il widget è diverso dal child visibile corrente, avverrà la transizione in accordo con il
transition type corrente. Nota: il child widget deve essere esso stesso visibile
(Gtk.Widget.show()) per poter diventare il child visibile dello stack!
Parametri:
child: il child widget che vogliamo rendere visibile;

set_visible_child_full(name, transition)

Rende il widget con il nome passato come argomento, il child visibile dello stack e decide quale
transizione utilizzare.
Nota: il child widget deve essere esso stesso visibile (Gtk.Widget.show()) per
poter diventare il child visibile dello stack!
Parametri:
name: il nome del child widget che vogliamo rendere visibile;
transition: l’oggetto Gtk.StackTransitionType corrispondente all’animazione desiderata.

set_visible_child_name(name)

Rende il widget con il nome passato come argomento, il child visibile dello stack.
Se il widget è diverso dal child visibile corrente, avverrà la transizione in accordo con il
transition type corrente.
Nota: il child widget deve essere esso stesso visibile (Gtk.Widget.show()) per
poter diventare il child visibile dello stack!
Parametri:
name: il nome del child widget da rendere visibile;

StackSwitcher

Il widget Gtk.StackSwitcher agisce come controller dei widget Gtk.Stack.
In pratica visualizza una riga di bottoni per spostarsi tra le pagine associate allo stack widget.
I contenuti dei bottoni derivano dalle properties dei child del Gtk.Stack; la visibilità dei
bottoni nel widget Gtk.StackSwitcher è controllata dalla visibilità del child, nel Gtk.Stack.
E’ possibile associare multipli widget Gtk.StackSwitcher con lo stesso Gtk.Stack.

Le properties principali del widget StackSwitcher sono:

Name Type Flags Short Description
icon-size int r/w/en Symbolic size to use for named icon
stack Gtk.Stack r/w/c Stack

Metodi

Oltre ai soliti getter e setter relativi alle properties dell’oggetto Gtk.StackSwitcher,
i principali metodi sono:

new()

Crea un nuovo widget Gtk.StackSwitcher.

get_stack()

Ritorna il widget stack, settato con il metodo Gtk.StackSwitcher.set_stack().

set_stack(stack)

Setta il widget stack che sarà controllato dal widget StackSwitcher.
Parametri:
stack: il widget Gtk.Stack da controllare o None;

Di seguito un codice di esempio:

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


class GWindow(Gtk.Window):
    def __init__(self):
        super().__init__(title="Stack Demo")
        self.set_border_width(10)

        stack = Gtk.Stack.new()
        stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT_RIGHT)
        stack.set_transition_duration(1000)

        checkbutton = Gtk.CheckButton(label="First page checkbutton")
        stack.add_titled(child=checkbutton, name="check", title="Check Button")

        label = Gtk.Label(label="Second page label")
        stack.add_titled(child=label, name="label", title="Label")

        stack_switcher = Gtk.StackSwitcher.new()
        stack_switcher.set_stack(stack)

        # layout
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
        vbox.pack_start(stack_switcher, True, True, 0)
        vbox.pack_start(stack, True, True, 0)
        self.add(vbox)


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 Stack
Gtk3 StackSwitcher

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