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

PyGObject: Gtk.ScrolledWindow

13 Aprile 2020

torna all’indice appunti

ScrolledWindow

Il Gtk.ScrolledWindow è un contenitore che accetta un singolo child widget, lo rende “scrollable”
(scorrevole) usando, sia le scrollbars interne, sia con adjustments
associati dall’esterno e, opzionalmente, disegnando un frame attorno al child.
I Widgets con supporto nativo allo scrolling, cioè quelle classi che implementano l’interfaccia
Gtk.Scrollable, vengono aggiunti direttamente. Invece, per quei tipi di widgets
che non implementano tale interfaccia, si utilizza la classe Gtk.Viewport,
che funge da adattatore, fornendo la scrollabilità mancante.
Derivando Gtk.ScrolledWindow da Gtk.Container permette l’utilizzo del metodo
add() che intelligentemente tiene conto che un widget sia un oggetto
Gtk.Scrollable o meno. In caso negativo, Gtk.ScrolledWindow lascia gestire il
child alla classe Gtk.Viewport, che fornisce il child dell’interfaccia mancante.

Se non si specifica esplicitamente che la policy della Gtk.ScrolledWindow sia di tipo
Gtk.PolicyType.NEVER, o Gtk.PolicyType.EXTERNAL, allora la
Gtk.ScrolledWindow, aggiungerà i widget Gtk.Scrollbar attorno al child automaticamente.
La posizione di scroll del child, e se siano applicabili le scrollbars, viene deciso attraverso le
properties “:hadjustment” e “:vadjustment”.
Qualora il comportamento della Gtk.ScrolledWindow non fosse quello desiderato, è sempre possibile
settare il proprio scrolling ricorrendo ai widget Gtk.Scrollbar.

Le properties principali sono:

Name Type Flags Short Description
hadjustment Gtk.Adjustment r/w/c Il Gtk.Adjustment relativo alla posizione orizzontale
hscrollbar-policy Gtk.PolicyType r/w/en la policy che regola quando visualizzare la scrollbar orizzontale
kinetic-scrolling bool r/w/en la modalità di Kinetic scrolling
max-content-height int r/w/en La massima altezza che la scrolled window allocherà per il proprio contenuto
max-content-width int r/w/en La massima larghezza che la scrolled window allocherà per il proprio contenuto
min-content-height int r/w/en La minima altezza che la scrolled window allocherà per il proprio contenuto
min-content-width int r/w/en La minima larghezza che la scrolled window allocherà per il proprio contenuto
overlay-scrolling bool r/w/en Settato a True fa comparire le scrollbar solo con il mouse. False, sempre presenti
propagate-natural-height bool r/w/en Calcola o meno la naturale altezza del child e la propaga alla scrolled window
propagate-natural-width bool r/w/en Calcola o meno la naturale larghezza del child e la propaga alla scrolled window
shadow-type Gtk.ShadowType r/w/en Lo stile dell’angolo attorno ai contenuti
vadjustment Gtk.Adjustment r/w/c Il Gtk.Adjustment relativo alla posizione verticale
vscrollbar-policy Gtk.PolicyType r/w/en la policy che regola quando visualizzare la scrollbar verticale
window-placement Gtk.CornerType r/w/en Dove sono posizionati i contenuti, rispetto alle scrollbars

Metodi

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

new(hadjustment, vadjustment)

Crea una nuova scrolled window. I due argomenti sono gli adjustments
della scrolled window e saranno condivisi tra le scrollbars e il child widget in modo da
sincronizzare le scrollbars con il child stesso.
Di solito si passa None per gli adjustments, in modo che la scrolled window
li crei per noi.
Parametri:
hadjustment: l’adjustment (Gtk.Adjustment) orizzontale, o None;
vadjustment: l’adjustment (Gtk.Adjustment) verticale, o None;

get_capture_button_press()

Ritorna True se il click button viene catturato durante il kinetic scrolling.

get_hadjustment()

Ritorna l’adjustment (Gtk.Adjustment) della scrollbar orizzontale, usato per connetterla alla
funzionalità di scroll orizzontale del child widget.

get_hscrollbar()

Ritorna la scrollbar orizzontale della scrolled window.

get_kinetic_scrolling()

Ritorna True se è stato impostato il kinetic scrolling.

get_max_content_height()

Ritorna il valore della massima altezza dedicata dalla scrolled window, ai contenuti.
Se non è stato impostato alcun limite, il metodo ritorna -1.

get_max_content_width()

Ritorna il valore della massima larghezza dedicata dalla scrolled window, ai contenuti.
Se non è stato impostato alcun limite, il metodo ritorna -1.

get_min_content_height()

Ritorna il valore della minima altezza dedicata dalla scrolled window, ai contenuti.
Se non è stato impostato alcun limite, il metodo ritorna -1.

get_min_content_width()

Ritorna il valore della minima larghezza dedicata dalla scrolled window, ai contenuti.
Se non è stato impostato alcun limite, il metodo ritorna -1.

get_overlay_scrolling()

Ritorna True se l’overlay scrolling è abilitato per la scrolled window.
L’overlay scrolling visualizza la scrollbar solo se il puntatore mouse è sopra di essa.
Per averla sempre presente settare la property “overlay-scrolling” a False.

get_placement()

Ritorna il valore dell’enum Gtk.CornerType relativo al posizionamento dei contenuti,
rispetto alle scrollbars.
vedere Gtk.ScrolledWindow.set_placement() per il settaggio.

get_policy()

Ritorna una tupla con i due valori di policy Gtk.PolicyType, settati per le scrollbars
orizzontale e verticale. Vedere Gtk.ScrolledWindow.set_policy() per il settaggio.

get_propagate_natural_height()

Ritorna True se la naturale altezza richiesta dal child, viene propagata sulla
scrolled window.

get_propagate_natural_width()

Ritorna True se la naturale larghezza richiesta dal child, viene propagata sulla
scrolled window.

get_shadow_type()

Ritorna l’enum Gtk.ShadowType settato per la scrolled window, ovvero il tipo di
outline della window.
Vedere Gtk.ScrolledWindow.set_shadow_type(), per il settaggio.

get_vadjustment()

Ritorna l’adjustment (Gtk.Adjustment) della scrollbar verticale, usato per connetterla alla
funzionalità di scroll verticale del child.

get_vscrollbar()

Ritorna la scrollbar verticale della scrolled window.

set_capture_button_press(capture_button_press)

Modifica il comportamento della scrolled window rispetto all’evento iniziale che possibilmente dà
inizio al kinetic scrolling.
Quando capture_button_press viene settato a True, l’evento viene
catturato dalla scrolled window, e quindi ripetuto in seguito se è destinato al child widget.
Questo settaggio ha effetto solo se il kinetic scrolling è abilitato.
Parametri:
capture_button_press: il boolean che settato a True
permette alla scrolled window di catturare i click button;

set_hadjustment(hadjustment)

Setta l’adjustment della scrollbar orizzontale.
Parametri:
hadjustment: l’adjustment da usare o None per
crearne uno nuovo;

set_kinetic_scrolling(kinetic_scrolling)

Abilita/Disabilita il kinetic scrolling. Il kinetic scrolling si applica solo ai dispositivi con
source Gdk.InputSource.TOUCHSCREEN.
Parametri:
kinetic_scrolling: il boolean che abilita/disabilita il kinetic
scrolling;

set_max_content_height(height)

Setta la massima altezza che la scrolled window dovrebbe lasciare visibile.
Non settare tale valore ad uno inferiore al valore della property “min-content-height”.
Parametri:
height: massima altezza (int) dei contenuti visibili;

set_max_content_width(width)

Setta la massima larghezza che la scrolled window dovrebbe lasciare visibile.
Non settare tale valore ad uno inferiore al valore della property “min-content-width”.
Parametri:
width: massima larghezza (int) dei contenuti visibili;

set_min_content_height(height)

Setta la minima altezza che la scrolled window dovrebbe lasciare visibile.
Non settare tale valore ad uno superiore al valore della property “max-content-height”.
Parametri:
height: minima altezza (int) dei contenuti visibili;

set_min_content_width(width)

Setta la minima larghezza che la scrolled window dovrebbe lasciare visibile.
Non settare tale valore ad uno superiore al valore della property “max-content-width”.
Parametri:
height: minima larghezza (int) dei contenuti visibili;

set_overlay_scrolling(overlay_scrolling)

Abilita/Disabilita overlay scrolling per la scrolled window, cioè visualizza la scrollbar solo se
il puntatore mouse è sopra di essa.
Parametri:
overlay_scrolling: il boolean che attiva/disattiva l’overlay
scrolling;

set_placement(window_placement)

Setta il posizionamento dei contenuti (child) rispetto alle scrollbars.
Il valore di default è l’enum Gtk.CornerType.TOP_LEFT, che significa che il child è nell’angolo
in alto a sinistra, con le scrollbars sotto di esso e a destra.
Gli altri valori settabili sono Gtk.CornerType.TOP_RIGHT, Gtk.CornerType.BOTTOM_LEFT e
Gtk.CornerType.BOTTOM_RIGHT.
Parametri:
window_placement: l’enum (Gtk.CornerType) che definisce la
posizione del child rispetto alle scrollbars.

set_policy(hscrollbar_policy, vscrollbar_policy)

Setta le policy di visibilità delle scrollbars orizzontale e verticale.
L’enum che decide quando la scrollbar debba apparire, può assumere i seguenti valori:
Gtk.PolicyType.ALWAYS: la scrollbar è sempre presente;
Gtk.PolicyType.NEVER: la scrollbar non è mai presente;
Gtk.PolicyType.AUTOMATIC: la scrollbar è presente solo se necessario;
Parametri:
hscrollbar_policy: l’enum (Gtk.PolicyType) della policy per la
scrollbar orizzontale;
vscrollbar_policy: l’enum (Gtk.PolicyType) della policy per la
scrollbar verticale;

set_propagate_natural_height(propagate)

Settato a True, calcola l’altezza naturale del child e la propaga attraverso la
scrolled window.
Parametri:
propagate: il boolean che attiva/disattiva la propagazione
dell’altezza del child alla scrolled window;

set_propagate_natural_width(propagate)

Settato a True, calcola la larghezza naturale del child e la propaga attraverso
la scrolled window.
Parametri:
propagate: il boolean che attiva/disattiva la propagazione
della larghezza del child alla scrolled window;

set_shadow_type(type)

Modifica il tipo di shadow attorno al child della scrolled window.
Il valori impostabili, dell’enum Gtk.ShadowType sono:
NONE (0): nessun outline
IN (1): outline smussato verso l’interno;
OUT (2): outline smussato verso l’esterno;
ETCHED_IN (3): outline con aspetto sunken 3d (scavato);
ETCHED_OUT (4): outline con aspetto raised 3d (sporgente);
Parametri:
type: l’enum (Gtk.ShadowType) che disegna il tipo di shadow
attorno al child della scrolled window;

set_vadjustment(vadjustment)

Setta l’adjustment della scrollbar verticale.
Parametri:
vadjustment: l’adjustment da usare o None per
crearne uno nuovo;

unset_placement()

Resetta il placement del child rispetto alle scrollbars. Se non è settato nessun placement per la
scrolled window, di default sarà Gtk.CornerType.TOP_LEFT.
Vedere Gtk.ScrolledWindow.set_placement() e Gtk.ScrolledWindow.get_placement().

Di seguito un codice di esempio:

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


class GWindow(Gtk.Window):
    def __init__(self):
        super().__init__(title="FlowBox Demo")
        self.set_border_width(10)
        self.set_default_size(250, 100)

        header = Gtk.HeaderBar(title="ScrolledWindow example")
        header.set_subtitle("Serie A")
        header.props.show_close_button = True
        self.set_titlebar(header)

        listbox = Gtk.ListBox()
        listbox.set_selection_mode(Gtk.SelectionMode.NONE)
        listbox = Gtk.ListBox()
        teams = ("Inter", "Juventus", "Lazio", "Atalanta", "Roma", "Verona",
                 "Bologna", "Cagliari", "Parma", "Milan", "Napoli", "Sassuolo",
                 "Torino", "Fiorentina", "Udinese", "Sampdoria", "Lecce",
                 "Genoa", "Brescia", "Spal")
        for team in teams:
            listbox.add(Gtk.Label(label=team))

        scrolled = Gtk.ScrolledWindow()
        scrolled.set_policy(hscrollbar_policy=Gtk.PolicyType.NEVER,
                            vscrollbar_policy=Gtk.PolicyType.AUTOMATIC)
        scrolled.add(listbox)
        scrolled.set_property("max-content-height", 5)
        scrolled.set_property("overlay-scrolling", True)

        self.add(scrolled)


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 ScrolledWindow

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