PyGObject: Gtk.HeaderBar

13 Aprile 2020 Commenti chiusi

torna all’indice appunti

HeaderBar

Il Gtk.HeaderBar è simile ad un Gtk.Box orizzontale, permette infatti di posizionare children
all’inizio o alla fine. In aggiunta permette di avere un titolo da visualizzare, tale titolo sarà
centrato sulla larghezza del box.
Dal momento che GTK+ supporta le decorazioni lato Client, un oggetto Gtk.HeaderBar
può essere utilizzato al posto della title bar (che è renderizzata dal Window Manager).
Una Gtk.HeaderBar dà anche l’accesso ai controlli della window, come il CloseButton e i
window menu.

Le properties principali sono:

Name Type Flags Short Description
custom-title Gtk.Widget r/w Il title widget personalizzato da visualizzare
decoration-layout str r/w il layout per le decorazioni della window
decoration-layout-set bool r/w Se la property “decoration-layout” è stata settata
has-subtitle bool r/w/en Se riserva spazio per un sottotitolo
show-close-button bool r/w/en Se deve visualizzare le decorazioni della window (es. close button)
spacing int r/w/en La quantità di spazio tra i children
subtitle str r/w Il sottotitolo da visualizzare
title str r/w Il titolo da visualizzare

Metodi

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

new()

Il metodo costruttore che crea un nuovo widget Gtk.HeaderBar

get_custom_title()

Ritorna il title widget personalizzato dell’header, o None se non ne è stato settato nessuno
esplicitamente.

get_decoration_layout()

Ritorna una stringa che rappresenta il decoration layout dell’header settato con il metodo
Gtk.HeaderBar.set_decoration_layout().

get_has_subtitle()

Ritorna True se l’headerbar riserva spazio per un sottotitolo

get_show_close_button()

Ritorna True se nell’headerbar sono visualizzate le window decorations,
ad esempio il window CloseButton.

get_subtitle()

Ritorna il sottotitolo della headerbar, o None se non è stato settato alcun
sottotitolo esplicitamente.

get_title()

Ritorna il titolo della headerbar, o None se non è stato settato alcun titolo
esplicitamente.

pack_end(child)

Aggiunge un child alla headerbar partendo dalla fine (come per il Gtk.Box).
I parametri sono:
child: il widget child (Gtk.Widget) da aggiungere alla headerbar;

pack_start(child)

Aggiunge un child alla headerbar partendo dall’inizio (come per il Gtk.Box).
I parametri sono:
child: il widget child (Gtk.Widget) da aggiungere alla headerbar;

set_custom_title(title_widget)

Aggiunge un titolo personalizzato alla headerbar. Questo sostituisce l’eventuale titolo settato
con il metodo Gtk.HeaderBar.set_title().
I parametri sono:
title_widget: il widget title (Gtk.Widget) da utilizzare come titolo;

set_decoration_layout(layout)

Setta il decoration layout per la headerbar, sovrascrivendo il Gtk.Setting “gtk-decoration-layout”
(ad esempio non vogliamo buttons sulla destra).
Il formato della stringa è dato dai nomi dei buttons, separati da comma (virgola)
e colon (due punti “:”) che separa ciò che deve essere visualizzato a sinistra,
da quello che deve essere visualizzato a destra.
Ad esempio “menu:minimize,maximize,close” significa che a sinistra avremo un menu, mentre a destra
i buttons minimize, maximize
e close.
I parametri sono:
layout: la stringa che rappresenta il decoration layout,
o None per togliere il layout;

set_has_subtitle(setting)

Serve per riservare o meno lo spazio nella headerbar, per un sottotitolo.
I parametri sono:
setting: True per riservare spazio al sottotitolo,
altrimenti False;

set_show_close_button(setting)

Setta se questa headerbar debba visualizzare, o meno, le standard window decorations,
che includono i buttons close, maximize e minimize.
I parametri sono:
setting: True per visualizzare le standard window
decorations, altrimenti False;

set_subtitle(subtitle)

Setta il sottotitolo della Gtk.HeaderBar. Notare che la HeaderBar, di default, riserva un’area per
il sottotitolo, anche se al metodo viene passato None.
Se non vogliamo un’area dedicata dobbiamo settare la property “has-subtitle” a
False.
I parametri sono:
subtitle: la stringa che indica il sottotitolo da visualizzare,
o None;

set_title(title)

Setta il titolo della Gtk.HeaderBar.
I parametri sono:
title: la stringa che indica il titolo da
visualizzare, o None;

Di seguito un codice di esempio:

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


class GWindow(Gtk.Window):

    def __init__(self):
        super().__init__(title="HeaderBar Example")
        self.set_border_width(10)
        self.set_default_size(500, 250)
        self.entry = Gtk.Entry(text="Type here...")
        self.add(self.entry)
        # build header bar
        header_bar = Gtk.HeaderBar()
        header_bar.set_show_close_button(True)
        header_bar.set_title("HeaderBar example")

        button_copy = Gtk.Button()
        icon_copy = Gio.ThemedIcon(name="edit-copy-symbolic")
        image_copy = Gtk.Image.new_from_gicon(icon_copy, Gtk.IconSize.BUTTON)
        button_copy.add(image_copy)
        header_bar.pack_end(button_copy)

        button_left = Gtk.Button()
        button_left.add(Gtk.Arrow(arrow_type=Gtk.ArrowType.LEFT,
                                  shadow_type=Gtk.ShadowType.NONE))
        button_right = Gtk.Button()
        button_right.add(Gtk.Arrow(arrow_type=Gtk.ArrowType.RIGHT,
                                   shadow_type=Gtk.ShadowType.NONE))
        # box composition
        box = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
        box.add(button_left)
        box.add(button_right)

        header_bar.pack_start(box)
        self.set_titlebar(header_bar)
        # bindings
        button_copy.connect("clicked", self.on_copy)

    def on_copy(self, button):
        print("INFO: text '%s' copied!" % self.entry.get_text())


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 HeaderBar

Categorie:Gtk3, PyGObject, python Tag: , ,

PyGObject: Gtk.Grid

13 Aprile 2020 Commenti chiusi

torna all’indice appunti

Grid

Il widget Gtk.Grid è un widget contenitore (come Gtk.Box) che impacchetta i widgets su una
griglia, posizionandoli in righe e colonne.
I widget verranno inseriti utilizzando il metodo attach().
E’ possibile inserire un widget child vicino ad un altro, con il metodo attach_next_to().
Il Gtk.Grid, può essere utilizzato come un Gtk.Box semplicemente utilizzando il metodo add()
ereditato da Gtk.Container, dal quale derivano entrambi. Ovviamente se l’esigenza è di creare una
singola riga di widget, è preferibile l’utilizzo di Gtk.Box.

Per creare una Grid si utilizza il costruttore Gtk.Grid(**kwargs).

Le properties più significative sono:

Name Type Flags Short Description
baseline-row int r/w/en un intero che indica su quale row allineare la baseline quando valign=Gtk.Align.BASELINE
column-homogeneous bool r/w/en un boolean che settato a True permette di avere le colonne, tutte della stessa larghezza
column-spacing int r/w/en un intero che indica quanto spazio lasciare tra una colonna e l’altra
row-homogeneous bool r/w/en un boolean che settato a True permette di avere le righe, tutte della stessa altezza
row-spacing int r/w/en un intero che indica quanto spazio lasciare tra una riga e l’altra

Le properties relative ai child contenuti nella griglia, sono invece:

Name Type Default Flags Short Description
height int 1 r/w il numero di righe che occupa il child (span)
left-attach int 0 r/w il numero di colonna a cui attaccare il bordo sinistro del child
top-attach int 0 r/w il numero di riga a cui attaccare il bordo superiore del child
width int 1 r/w il numero di colonne occupate dal widget (span)

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
>>> grid = Gtk.Grid(row_spacing=5)
>>> grid.get_property("row-spacing")
5
>>> grid.set_property("row-spacing", 10)
>>> grid.get_property("row-spacing")
10

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

 
>>> grid.get_column_homogeneous()
False
>>> grid.set_column_homogeneous(True)
>>> grid.get_column_homogeneous()
True

Metodi

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

new()

Il metodo costruttore che crea un nuovo widget Gtk.Grid.

attach(child, left, top, width, height)

Aggiunge un child widget al grid.
Parametri:
child: l’oggetto Gtk.Widget da aggiungere alla griglia;
left: il numero (int) di colonna al quale inserire il child;
top: il numero (int) di riga nel quale inserire il child;
width: il numero (int) di celle che occuperà il child orizzontalmente (span);
height: il numero (int) di celle che il child occuperà verticalmente (span);

 
>>> grid = Gtk.Grid(row_spacing=5)
>>> button1 = Gtk.Button(label="Button 1")
>>> grid.attach(child=button1, left=0, top=0, width=1, height=1)

attach_next_to(child, sibling, side, width, height)

Aggiunge un widget (child) al grid vicino al widget di riferimento (sibling), secondo il side
desiderato (sinstra/alto verso destra/basso e viceversa).
Il “side” è un enum di tipo Gtk.PositionType
che indica il lato al quale affiancheremo il child; può assumere i seguenti valori:
LEFT (0): il child viene affiancato sul lato sinistro;
RIGHT (1): il child viene affiancato sul lato destro del sibling;
TOP (2): il child viene posizionato sopra al sibling;
BOTTOM (3): il child viene posizionato sotto al sibling;

 
>>> button2 = Gtk.Button(label="Button 2")
>>> grid.attach_next_to(child=button2, sibling=button1, side=Gtk.PositionType.RIGHT,
...                     width=1, height=1)

Parametri:
child: l’oggetto Gtk.Widget da aggiungere alla griglia;
sibling: l’oggetto Gtk.Widget di riferimento. Se sibling=None, child viene inserito ad inizio/fine a seconda del side;
side:
width (int) – the number of columns that child will span
width: il numero (int) di celle che occuperà il child orizzontalmente (span);
height: il numero (int) di celle che il child occuperà verticalmente (span);

get_baseline_row()

Ritorna l’indice della row che definisce la baseline del grid.

get_child_at(left, top)

Ritorna il child alla posizione data.

 
>>> grid.get_child_at(left=0, top=0).get_label()
'Button 1'
>>> grid.get_child_at(left=1, top=0).get_label()
'Button 2'

Parametri:
left: (int) il lato sinistro della cella;
top: (int) la parte superiore della cella;

get_column_homogeneous()

Ritorna il valore della property “column-homogeneous”.
True, se le colonne hanno tutte la stessa larghezza, altrimenti False.

get_column_spacing()

Ritorna il valore della property “column-spacing”, ovvero lo spazio che c’è tra le colonne.

get_row_baseline_position(row)

Ritorna la posizione della baseline della singola row, se settata con
Gtk.Grid.set_row_baseline_position(), oppure il valore di default Gtk.BaselinePosition.CENTER.
Parametri:
row: è l’indice della row della quale vogliamo conoscere la posizione della baseline;

get_row_homogeneous()

Ritorna il valore della property “row-homogeneous”.
True, se le righe hanno tutte la stessa altezza, altrimenti False.

get_row_spacing()

Ritorna il valore della property “row-spacing”, ovvero lo spazio che c’è tra una riga e l’altra.

insert_column(position)

Inserisce una colonna nella posizione specificata.
I widget che sono attaccati a questa posizione saranno spostati a destra, mentre quelli che
occupano questa posizione per via dello span, accresceranno la loro dimensione per occupare anche
la nuova colonna aggiunta.
Parametri:
position: la posizione nella quale vogliamo inserire una colonna;

insert_next_to(sibling, side)

Inserisce una riga o una colonna alla posizione specificata. La nuova riga/colonna sarà inserita
vicino al widget di riferimento e sarà una riga, se side sarà uno tra Gtk.PositionType.TOP o
Gtk.PositionType.BOTTOM, o sarà una colonna, se side sarà uno tra Gtk.PositionType.LEFT e
Gtk.PositionType.RIGHT.
Parametri:
sibling: il child (Gtk.Widget) di riferimento vicino al quale inseriremo
la riga/colonna, a seconda del side;
side: un enum di tipo Gtk.PositionType che
specifica se ad essere inserita vicino a child, sarà una riga o una colonna;

insert_row(position)

Inserisce una riga nella posizione specificata.
I widget che sono attaccati a questa posizione saranno spostati in basso, mentre quelli che
occupano questa posizione per via dello span, accresceranno la loro dimensione per occupare anche
la nuova riga aggiunta.
Parametri:
position: la posizione nella quale vogliamo inserire una riga;

remove_column(position)

Rimuove la colonna dalla grid.
I widgets di questa colonna vengono rimossi, quelli dopo si spostano verso sinistra e i widgets
con span sulla colonna rimossa, riducono la propria larghezza di una cella.
Parametri:
position: l’indice della colonna da rimuovere;

remove_row(position)

Rimuove la riga dalla grid.
I widgets di questa riga vengono rimossi, quelli dopo si spostano verso l’alto e i widgets con
span sulla riga rimossa, riducono la propria altezza di una cella.
Parametri:
position: l’indice della riga da rimuovere;

set_baseline_row(row)

Setta quale riga definisce la baseline globale dell’intera griglia (anche le singole righe hanno
la loro baseline locale).
Parametri:
row: l’indice della riga che sarà la baseline globale;

set_column_homogeneous(homogeneous)

Definisce se le colonne debbano avere la stessa larghezza (True), o meno (False).
Parametri:
homogeneous: il boolean che modifica la property “column-homogeneous”;

set_column_spacing(spacing)

Setta quando spazio lasciare tra una colonna e l’altra.
Parametri:
spacing: un intero che definisce lo spazio tra le colonne;

set_row_baseline_position(row, pos)

Setta la posizione della baseline locale della singola row, quando è assegnato più spazio
del necessario.
Parametri:
row: l’indice della riga sulla quale definire la posizione della baseline;
pos: un enum di tipo Gtk.BaselinePosition
e può assumere i valori:
TOP (0): allinea la baseline locale della row in alto;
CENTER (1): allinea la baseline al centro (default);
BOTTOM (2): allinea la baseline in basso;

set_row_homogeneous(homogeneous)

Definisce se le righe debbano avere la stessa altezza (True), o meno (False).
Parametri:
homogeneous: il boolean che modifica la property “row-homogeneous”;

set_row_spacing(spacing)

Setta quando spazio lasciare tra una riga e l’altra.
Parametri:
spacing: un intero che definisce lo spazio tra le righe;

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="Grid Example")

        grid = Gtk.Grid()

        button1 = Gtk.Button(label="Button 1")
        button2 = Gtk.Button(label="Button 2")
        button3 = Gtk.Button(label="Button 3")
        button4 = Gtk.Button(label="Button 4")
        button5 = Gtk.Button(label="Button 5")
        button6 = Gtk.Button(label="Button 6")

        grid.add(button1)
        grid.attach(child=button2, left=1, top=0, width=2, height=1)
        grid.attach_next_to(child=button3, sibling=button1,
                            side=Gtk.PositionType.BOTTOM, width=1, height=2)
        grid.attach_next_to(child=button4, sibling=button3,
                            side=Gtk.PositionType.RIGHT, width=2, height=1)
        grid.attach(child=button5, left=1, top=2, width=1, height=1)
        grid.attach_next_to(child=button6, sibling=button5,
                            side=Gtk.PositionType.RIGHT, width=1, height=1)
        self.add(grid)


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 Grid

Categorie:Gtk3, PyGObject, python Tag: , ,

PyGObject: Gtk.Box

13 Aprile 2020 Commenti chiusi

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: , ,

PyGObject: Gtk.Application

13 Aprile 2020 Commenti chiusi

torna all’indice degli appunti

Application

Gtk.Application comprende molti compiti ripetitivi che una applicazione deve gestire, come ad
esempio la gestione di istanze multiple, l’attivazione di D-Bus, l’apertura dei files, il parsing
della linea di comando, lo startup e lo shutdown, la gestione dei menu, la gestione della window, ecc.
Eredita dalla classe Gio.Application, ovvero la classe cardine di
una applicazione.
I compiti che deve svolgere un’applicazione (tasks), sono rappresentati dalla classe Gio.Action.
E’ consigliato utilizzare la classe Gtk.Application in concomitanza con la window class
Gtk.ApplicationWindow.

command line

Come accennato in precedenza, Gtk.Application si occupa di alcuni compiti, come ad esempio il
parsing della linea di comando.
A questo proposito, Gtk.Application eredita da Gio.Application il metodo do_command_line
che prende in ingresso un oggetto Gio.ApplicationCommandLine,
che rappresenta l’invocazione dell’applicazione da riga di comando, parametri compresi.

Metodi command line

I metodi più utili dell’oggetto Gio.ApplicationCommandLine sono:

get_arguments()

Ritorna la lista di argomenti passati sulla linea di comando.

get_cwd()

Ritorna la working directory corrente al momento dell’invocazione da linea di comando

get_options_dict()

Ritorna le opzioni passate in linea di comando. Se non viene passata nessuna opzione,
verrà ritornato un dizionario vuoto.
Il dizionario è un oggetto GLib.VariantDict
che puè essere riconvertito in un oggetto GLib.Variant,
invocandone il metodo end().
e a sua volta convertito in un oggetto Python nativo, con il metodo unpack().

Application Flags

Quando creiamo una applicazione questa utilizza una flag property di Gio.ApplicationFlags.
L’utilizzo di tali flags permette di personalizzare il comportamento della applicazione stessa.
Possiamo ad esempio utilizzare HANDLES_COMMAND_LINE per personalizzare il metodo
Gio.Application.do_command_line() gestendo gli argomenti passati in riga di comando.
Il tutto in collaborazione con Gio.Application.add_main_option()

Ecco un esempio:

import sys

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


class AppWindow(Gtk.ApplicationWindow):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.label = Gtk.Label(label="Application example",
                               margin=30)
        self.add(self.label)
        self.show_all()


class Application(Gtk.Application):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, application_id="bancaldo.myapp",
                         flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE,
                         **kwargs)
        self.window = None

        self.add_main_option(long_name="test", short_name=ord("t"),
                             flags=GLib.OptionFlags.NONE,
                             arg=GLib.OptionArg.NONE,
                             description="Command line test",
                             arg_description=None)

    def do_activate(self):
        if not self.window:
            print("INFO: activating window...")
            self.window = AppWindow(application=self, title="Main Window")
        self.window.present()

    def do_command_line(self, command_line):
        options = command_line.get_options_dict()
        # converto GVariantDict -> GVariant -> dict
        options = options.end().unpack()
        if "test" in options:
            print("INFO: command line argument recieved: %s" % options["test"])
        self.activate()
        return False


if __name__ == "__main__":
    app = Application()
    app.run(sys.argv)

Nota:
il metodo do_activate(), come tutti i virtual methods con prefisso “do_”, è un
metodo virtuale che può essere ridefinito nella classe (Gtk.Application) che deriva dalla classe
genitore (Gio.Application).
Tali metodi equivalgono all’emissione dei segnali corrispondenti.
In tal senso do_activate equivale all’emissione del segnale “activate”.
Nell’esempio richiamiamo il virtual method do_activate(), dall’interno di
do_command_line, emettendo il segnale “activate” (con il metodo activate()).
Questo segnale attiva di fatto l’applicazione.

Actions

Gio.Action è una classe che permette di rappresentare ogni singolo compito
che generalmente svolge una app, con un nome.
Tali “azioni” possono essere abilitate e disabilitate a runtime, possono essere attivate o
cambiare stato (se ne possiedono uno).
L’utilizzo delle actions è utile per tenere separata la logica dell’applicazione, dalla UI.
La principale e più semplice implementazione delle actions, si ottiene utilizzando la classe
Gio.SimpleAction.
Con il metodo Gio.SimpleAction.new_stateful(name, parameter_type, state) si crea, ad esempio,
un oggetto SimpleAction, passandogli come argomenti:
Parametri:
name: il nome (str) della action;
parameter_type: il tipo GLib.VariantType che sarà passato
all’handler del segnale “activate” di Gio.SimpleAction, o None per nessun parametro;
state: l’oggetto GLib.Variant per lo stato iniziale
della action;

Anche molte classi come Gio.MenuItem e Gtk.ModelButton permettono
di settare una action.
Le actions possono anche essere raggruppate insieme in un oggetto Gio.ActionGroup
e quando questi gruppi verranno aggiunti ad un widget con il metodo Gtk.Widget.insert_action_group()
avranno in dote un prefisso corrispondente al tipo di widget (ad esempio prefisso “win”,
per Gtk.ApplicationWindow).
Nel momento della creazione, daremo un nome parziale, ad esempio “about”, ma quando lo
aggiungeremo ad esempio al widget Gtk.Application, ci riferiremo ad esso con il prefisso: “app.about”.
Con il metodo Gtk.Application.add_accelerator() potremo facilmente fare il
keybinding della azione desiderata.

Menu

I Menu vengono definiti in XML usando Gio.Menu e
devono referenziare le actions viste precedentemente.
L’oggetto Gtk.Application permette di settare un menu, tramite i metodi
Gtk.Application.set_app_menu() o Gtk.Application.set_menubar().
Per questo motivo è bene accennare l’oggetto Gtk.Builder,
che è un oggetto che legge una descrizione testuale riguardante la UI (il nostro XML) e crea gli
oggetti descritti in essa grazie ai metodi Gtk.Builder.new_from_file(),
Gtk.Builder.new_from_resource() o Gtk.Builder.new_from_string().

Ecco un codice di esempio che comprende anche actions e menu:

import sys

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


MENU_XML = """
<?xml version="1.0" encoding="UTF-8"?>
<interface>
  <menu id="app-menu">
    <section>
      <item>
        <attribute name="action">win.maximize</attribute>
        <attribute name="label" translatable="yes">Maximize</attribute>
      </item>
    </section>
    <section>
      <item>
        <attribute name="action">app.about</attribute>
        <attribute name="label" translatable="yes">_About</attribute>
      </item>
    </section>
  </menu>
</interface>
"""


class AppWindow(Gtk.ApplicationWindow):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.set_default_size(250, 150)

        self.max_action = Gio.SimpleAction.new_stateful(
            name="maximize",
            parameter_type=None,  # nessun parametro da passare all'handler
            state=GLib.Variant.new_boolean(False))  # state iniziale
        # bindings
        self.max_action.connect("change-state", self.on_maximize_toggle)
        self.connect("notify::is-maximized", self.on_change_state)

        self.add_action(self.max_action)
        # layout
        box = Gtk.Box(spacing=10)
        label = Gtk.Label(label="Click on top-left menu")
        box.pack_start(label, True, True, 0)
        box.set_homogeneous(True)
        self.add(box)
        self.show_all()

    def on_maximize_toggle(self, action, value):
        action.set_state(value)
        if value.get_boolean():
            self.maximize()
        else:
            self.unmaximize()

    def on_change_state(self, obj, pspec):
        state = obj.props.is_maximized
        self.max_action.set_state(GLib.Variant.new_boolean(state))


class Application(Gtk.Application):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, application_id="bancaldo.myapp",
                         flags=Gio.ApplicationFlags.HANDLES_COMMAND_LINE,
                         **kwargs)
        self.window = None

        self.add_main_option(long_name="test", short_name=ord("t"),
                             flags=GLib.OptionFlags.NONE,
                             arg=GLib.OptionArg.NONE,
                             description="Command line test",
                             arg_description=None)

    def do_startup(self):
        Gtk.Application.do_startup(self)
        action = Gio.SimpleAction.new("about", None)
        action.connect("activate", self.on_about)
        self.add_action(action)
        builder = Gtk.Builder.new_from_string(MENU_XML, -1)
        self.set_app_menu(builder.get_object("app-menu"))

    def do_activate(self):
        if not self.window:
            self.window = AppWindow(application=self, title="Main Window")

        self.window.present()

    def do_command_line(self, command_line):
        options = command_line.get_options_dict()
        # converto GVariantDict -> GVariant -> dict
        options = options.end().unpack()
        if "test" in options:
            print("INFO: command line argument recieved: %s" % options["test"])
        self.activate()
        return False

    def on_about(self, action, param):
        about_dialog = Gtk.AboutDialog(transient_for=self.window, modal=True)
        about_dialog.connect("response", self.on_about_close)
        about_dialog.present()

    @staticmethod
    def on_about_close(dialog, param):
        dialog.destroy()


if __name__ == "__main__":
    app = Application()
    app.run(sys.argv)

link di riferimento:

torna all’indice degli appunti
Gtk3 Application

Categorie:Gtk3, PyGObject, python Tag: , ,

Python: PyGObject (Gtk3) appunti

13 Aprile 2020 Commenti chiusi

link di riferimento:
python gtk3 tutorial
Gtk3

Install

Su Ubuntu e Debian derivate installare i pacchetti: python3-gi, python3-gi-cairo e gir1.2-gtk-3.0:

$ sudo apt install python3-gi python3-gi-cairo gir1.2-gtk-3.0

Creare un file di test:

$ touch testgi.py

ed al suo interno scrivere il seguente codice:

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


if __name__ == "__main__":
    window = Gtk.Window(title="Hello World")
    window.show()
    window.connect("destroy", Gtk.main_quit)
    Gtk.main()

ed eseguire il file con:

$ python3 testgi.py

Per l’installazione su windows seguire la guida ufficiale.

PyGObject

PyGObject è un modulo di Python che fornisce l’accesso alle librerie GObject-based come le GTK+.
PyGObject supporta esclusivamente GTK+ versione 3 o successive.
Per l’utilizzo di GTK+ 2 è necessario installare il modulo PyGTK

Appunti

Properties
Signals

Classi

Gtk.Application
Gtk.MenuBar
Gtk.Toolbar
Gtk.Builder
Gtk.HeaderBar
Gtk.Popover
Gio.SimpleAction
Gio.ActionMap
Gtk.ScrolledWindow

layout
Gtk.Box
Gtk.EventBox
Gtk.Grid

Gtk.Button
Gtk.LinkButton
Gtk.RadioButton
Gtk.ToggleButton
Gtk.CheckButton
Gtk.SpinButton
Gtk.Switch
Gtk.Label
Gtk.Entry
Gtk.ListBox
Gtk.ComboBox

model-view
Gtk.ListStore
Gtk.IconView
Gtk.TreeStore
Gtk.CellRenderer

Gtk.MessageDialog
Gtk.FileChooserDialog
Gtk.ProgressBar
Gtk.Spinner
Gtk.Stack e Gtk.StackSwitcher
Gtk.FlowBox

Gtk.Clipboard

Gtk.Image
GdkPixbuf.Pixbuf

Drag and Drop
Notebook
TextView (Multiline Text Editor)

link di riferimento:
python Gtk3 tutorial
Gtk3

Categorie:Gtk3, PyGObject, python Tag: , ,

PyGObject: Gtk.FlowBox

13 Aprile 2020 Commenti chiusi

torna all’indice appunti

FlowBox

Il widget Gtk.FlowBox è un widget contenitore che posiziona i child widgets in
sequenza, a seconda dell’orientamento definito.
Ad esempio, se viene settato un orientamento orizzontale, i child widgets verranno posizionati da
sinistra verso destra e, se necessario, verrà iniziata una nuova riga sotto quella precedente
(ad esempio riducendo la larghezza della finestra).
Alla stessa maniera, settando un orientamento verticale, i child widgets verranno arrangiati
dall’alto verso il basso, aggiungendo nuove colonne, qualora fosse necessario (ad esempio
riducendo l’altezza della finestra).
I child widgets di un Gtk.FlowBox possono essere dinamicamente ordinati e filtrati.
Nonostante sia consigliato che un Gtk.FlowBox abbia solo child di tipo Gtk.FlowBoxChild,
è possibile aggiungere ogni tipo di widget, utilizzando il metodo ereditato dalla classe
Gtk.Container, dalla quale Gtk.FlowBox deriva, cioè Gtk.Container.add().
Nota:
La gestione delle dimensioni del widget Gtk.FlowBox non è come ci si aspetta, volendo quindi
ridurle sia orizzontalmente, che verticalmente, richiede l’utilizzo di un widget Gtk.ScrolledWindow
che ne abiliti queste funzionalità.

Le properties principali sono:

Name Type Flags Short Description
activate-on-single-click bool r/w/en Se la riga è attivabile con un singolo click
column-spacing int r/w/en La quantità di spazio orizzontale tra 2 children
homogeneous bool r/w/en Se i children saranno di dimensioni omogenee
max-children-per-line int r/w/en Il numero massimo di children allocabili consecutivamente rispetto all’orientamento settato
min-children-per-line int r/w/en Il minimo numero di children allocabili consecutivamente rispetto all’orientamento settato
row-spacing int r/w/en La quantità di spazio verticale tra 2 children
selection-mode Gtk.SelectionMode r/w/en Il tipo di selection mode

Segnali

Sono i segnali ereditati principalmente da Gtk.Container:

Name Short Description
activate-cursor-child Il segnale “activate-cursor-child” viene emesso quando il box viene attivato
child-activated il segnale “child-activated” viene emesso quando viene attivato un child
select-all Il segnale “select-all” viene emesso quando tutti i children del box vengono selezionati, se selection-mode lo permette
selected-children-changed Il segnale “selected-children-changed” viene emesso quando il set di children selezionati cambia
unselect-all Il segnale “unselect-all” viene emesso quando tutti i children del box vengono deselezionati

Metodi

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

new()

Metodo costruttore che crea un nuovo widget Gtk.FlowBox.

bind_model(model, create_widget_func, *user_data)

Lega un model al flowbox. Se il flowbox è già legato ad un model, il precedente legame viene
distrutto, il contenuto del flowbox azzerato e viene ripopolato con i widget che rappresentano
gli elementi del nuovo model.
Ogni volta che il model cambiam il flowbox viene aggiornato. Se model è None,
il flowbox risulta vuoto.
Se un flowbox è lagato ad un model, aggiungere widget direttamente con i metodi Gtk.FlowBox.insert()
e Gtk.Container.add()) darà risultati indefiniti.
Nota:
Se si lega il flowbox ad un model, le funzionalità di filtering e di sorting di Gtk.FlowBox non
funzioneranno, poichè dovranno essere implementate direttamente sul model.
Parametri:
model: un oggetto Gio.ListModel a cui legare il flowbox;
create_widget_func: una funzione che crea gli elementi (widgets);
user_data: i dati utente da passare alla funzione create_widget_func;

get_activate_on_single_click()

Ritorna True se i children si attivano con un click singolo.

get_child_at_index(idx)

Ritorna il child (Gtk.FlowBoxChild) alla posizione data.
Parametri:
idx la posizione del child desiderato;

get_child_at_pos(x, y)

Ritorna il child (Gtk.FlowBoxChild) alle coordinate date, o None in caso a quelle
coordinate, non ci siano widgets.
Parametri:
x: la coordinata x del widget child;
y: la coordinata y del widget child;

get_column_spacing()

Ritorna lo spazio orizzontale utilizzato per distanziare i child widget.

get_homogeneous()

Ritorna True se il box è omogeneo, ovvero i widgets hanno tutti le stesse dimensioni.

get_max_children_per_line()

Ritorna il massimo numero di children ammessi per riga/colonna.

get_min_children_per_line()

Ritorna il minimo numero di children ammessi per riga/colonna.

get_row_spacing()

Ritorna lo spazio verticale dedicato al distanziamento delle righe.

get_selected_children()

Crea una lista di tutti i children (Gtk.FlowBoxChild) selezionati.

get_selection_mode()

Ritorna il tipo di selection-mode (Gtk.SelectionMode) impostato sul flowbox.

insert(widget, position)

Inserisce un widget (Gtk.Widget) nel flowbox, alla posizione desiderata.
Se un funzione di ordinamento è stata settata, il widget sarà inserito comunque alla posizione
desiderata. Se position=-1, o maggiore del numero totale di children presenti nel flowbox,
il widget sarà inserito alla fine.
Parametri:
widget: il child (Gtk.Widget) da aggiungere;
position: la posizione dove vogliamo aggiungere il child;

invalidate_filter()

Aggiorna il filtering per tutti i children.
Chiamare questa funzione quando il risultato della funzione di filter è cambiata a causa di
fattori esterni, ad esempio quando la funzione di filter ha appena cercato dei risultati e il
testo della entry, con il quale filtriamo i risultati, cambia.

invalidate_sort()

Aggiorna il sorting per tutti i children.
Chiamare questa funzione quando il risultato della funzione di sort (ordinamento) è cambiata
a causa di fattori esterni

select_all()

Seleziona tutti i children del flowbox, se il selection mode lo permette.

select_child(child)

Seleziona un singolo child del flowbox, se il selection mode lo permette.
Parametri:
child: il child (Gtk.FlowBoxChild) che vogliamo selezionare;

selected_foreach(func, *data)

Chiama una funzione per ogni child selezionato. All’interno di questa funzione, la selezione non
può essere modificata.
Parametri:
func: la funzione (Gtk.FlowBoxForeachFunc) da chiamare per ogni
child selezionato;
data: i dati da passare alla funzione;

set_activate_on_single_click(single)

Se single è True i children verranno attivati con in click singolo.
Parametri:
single: un boolean che settato a True, permette
di selezionare un child con click singolo;

set_column_spacing(spacing)

Setta lo spazio orizzontale da aggiungere tra i children.
Vedere la property “column-spacing” di Gtk.FlowBox.
Parametri:
spacing: il valore dello spacing orizzontale da usare tra i children;

set_filter_func(filter_func, *user_data)

Settando una funzione di filter nel flowbox possiamo decidere dinamicamente quali children
mostrare, ad esempio con una funzione di ricerca, mostrare solo quei children che contengono i
termini di ricerca. La funzione di filter filter_func sarà chiamata per ogni child, e verrà
chiamata ogni volta che un child cambia, grazie al metodo Gtk.FlowBoxChild.changed(),
o quando viene chiamato il metodo Gtk.FlowBox.invalidate_filter().
Nota: utilizzare una funzione di filter è incompatibile con l’utilizzo di un
model (vedi Gtk.FlowBox.bind_model()).
Parametri:
filter_func: la callback (Gtk.FlowBoxFilterFunc) che filtra i
children da visualizzare;
user_data: i dati da passare alla funzione di filter filter_func;

set_hadjustment(adjustment)

Collega un adjustment per la gestione del focus nel flowbox.
L’adjustment è anche usato per l’autoscrolling durante una selezione “rubberband”.
Vedere Gtk.ScrolledWindow.get_hadjustment() per un esempio tipico di come
ottenere un adjustment, e Gtk.FlowBox.set_vadjustment() per il settaggio
dell’adjustment verticale. L’adjustments deve essere in pixel e nello stesso sistema di coordinate
usato per l’allocazione dei children.
Parametri:
adjustment: l’adjustment (Gtk.Adjustment) da utilizzare quando il
focus si sposta tra i discendenti del contenitore;

set_homogeneous(homogeneous)

Setta la property “homogeneous” del Gtk.FlowBox per garantire, o meno, che a tutti i children
del flowbox venga garantito lo stesso spazio.
Parametri:
homogeneous: il boolean che settato a True crea
lo stesso alloggiamento per ogni child;

set_max_children_per_line(n_children)

Setta il massimo numero di children da allocare in linea, in accordo con l’orientamento del flowbox.
Parametri:
n_children: il massimo numero di children per linea;

set_min_children_per_line(n_children)

Setta il minimo numero di children da allocare in linea, in accordo con l’orientamento del flowbox.
Parametri:
n_children: il minimo numero di children per linea;

set_row_spacing(spacing)

Setta lo spazio verticale da aggiungere tra i children, modificando la property “row-spacing”
del flowbox.
Parametri:
spacing: lo spazio da aggiungere verticalmente tra i children;

set_selection_mode(mode)

Setta il tipo di selection mode nel flowbox.
Parametri:
mode: il selection-mode (Gtk.SelectionMode) da utilizzare;

set_sort_func(sort_func, *user_data)

Settando una funzione di sort (ordinamento) nel flowbox possiamo decidere dinamicamente di
riordinare i children. La funzione di sort sort_func sarà chiamata per ogni child, e verrà
chiamata ogni volta che un child cambia, grazie al metodo Gtk.FlowBoxChild.changed(),
o quando viene chiamato il metodo Gtk.FlowBox.invalidate_sortr().
Nota: utilizzare una funzione di sort è incompatibile con l’utilizzo di un
model (vedi Gtk.FlowBox.bind_model()).
Parametri:
sort_func: la callback (Gtk.FlowBoxFilterFunc) che ordina i children;
user_data: i dati da passare alla funzione di sort sort_func;

set_vadjustment(adjustment)

Collega un adjustment per la gestione del focus nel flowbox.
L’adjustment è anche usato per l’autoscrolling durante una selezione “rubberband”.
Vedere Gtk.ScrolledWindow.get_vadjustment() per un esempio tipico di come
ottenere un adjustment, e Gtk.FlowBox.set_hadjustment() per il settaggio
dell’adjustment orizzontale. L’adjustments deve essere in pixel e nello stesso sistema di
coordinate usato per l’allocazione dei children.
Parametri:
adjustment: l’adjustment (Gtk.Adjustment) da utilizzare quando il
focus si sposta tra i discendenti del contenitore;

unselect_all()

Deseleziona tutti i children del flowbox.

unselect_child(child)

Deseleziona il child passato come argomento.
Parametri:
child: il child (Gtk.FlowBoxChild) del flowbox che vogliamo
selezionare;

FlowBoxChild

Come abbiamo visto, i child di un widget Gtk.FlowBox, sono delle istanze della classe Gtk.FlowBoxChild.
Sono anche essi dei contenitori di widget.

le Properties sono ereditate dal widget Gtk.Container.
Il segnale a cui connettersi è

Name Short Description
activate Il segnale “activate” viene emesso quando il child nel Gtk.FlowBox viene attivato (click, doppio click, Spazio, o tasto Enter)

I metodi principali sono:

new()

Crea un nuovo widget Gtk.FlowBoxChild, da usare come child di un widget Gtk.FlowBox.

>>> import gi
... gi.require_version('Gtk', '3.0')
... from gi.repository import Gtk, Gdk
>>> flowboxchild = Gtk.FlowBoxChild.new()

add(child)

Metodo ereditato dalla classe Gtk.Container,
dalla quale Gtk.FlowBoxChild deriva. Aggiunge un widget al contenitore FlowBoxChild.
Parametri:
child: il widget da aggiungere al flowboxchild;

>>> label = Gtk.Label(label="label 0")
>>> flowboxchild.add(label)

changed()

Setta il child (Gtk.FlowBoxChild) come “changed”. Questo cambio di stato ha effetto sulle
eventuali funzioni di sort e filter.

get_child

Metodo ereditato dalle classi genitore, che ritorna il widget con il quale abbiamo creato
il widget Gtk.FlowBoxChild.

>>> flowboxchild.get_child().get_label()
'label 0'

get_index()

Ritorna l’indice del flowboxchild o -1 se il flowbox non risiede in un flowbox.

>>> flowboxchild.get_index()
-1
>>> flowbox = Gtk.FlowBox.new()
>>> flowbox.add(flowboxchild)
>>> flowboxchild.get_index()
0

is_selected()

Ritorna True se il flowboxchild risulta selezionato nel flowbox.

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(300, 250)
        # Header
        header = Gtk.HeaderBar(title="FlowBox example")
        header.set_subtitle("Labels")
        header.props.show_close_button = True
        self.set_titlebar(header)

        scrolled = Gtk.ScrolledWindow()
        # define the scrollbar visibility
        scrolled.set_policy(hscrollbar_policy=Gtk.PolicyType.NEVER,
                            vscrollbar_policy=Gtk.PolicyType.AUTOMATIC)
        flowbox = Gtk.FlowBox.new()
        flowbox.set_selection_mode(Gtk.SelectionMode.SINGLE)
        flowbox.set_valign(Gtk.Align.START)
        flowbox.set_max_children_per_line(3)

        for char in 'abcdefghjklm':
            button = Gtk.Button(label=char)
            flowbox.add(button)

        scrolled.add(flowbox)
        self.add(scrolled)

        flowbox.connect("selected-children-changed", self.on_child_select)

    def on_child_select(self, flowbox):
        selected = [child for child in flowbox.get_selected_children()
                    if child.is_selected()]
        if selected:
            for s_child in selected:
                label = s_child.get_child().get_label()
                print("INFO: child <{}> at position <{}> selected!".format(
                      label, s_child.get_index()))


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 FlowBox

Categorie:Gtk3, PyGObject, python Tag: , ,

PyGObject: Gtk.FileChooserDialog

13 Aprile 2020 Commenti chiusi

torna all’indice degli appunti

FileChooserDialog

Il widget Gtk.FileChooserDialog è un box dialog utilizzato per l’apertura/salvataggio di un file.
Implementa l’interfaccia Gtk.FileChooser
in modo da poterne utilizzare tutti i metodi.
Qualora si decidesse di utilizzare il FileChooserDialog nativo dell’OS in uso, utilizzare la
classe Gtk.FileChooserNative.
Il FileChooserDialog, eredita dal widget Gtk.Dialog, il metodo run() che lo rende
modale e ritorna il response alla window genitore.

Per creare un message dialog si utilizza il costruttore Gtk.FileChooserDialog (*args, **kwargs).

La property principale dell’oggetto filechooserdialog è :

Name Short Description
parent la top-level window che genera il filechooserdialog

Le altre properties sono quelle ereditate da Gtk.FileChooser:

Name Type Flags Short Description
action Gtk.FileChooserAction r/w Il tipo di operazione che il file selector può eseguire
create-folders bool r/w un boolean che permette di creare un directory in open mode
do-overwrite-confirmation bool r/w un boolean che setta in save mode la conferma di sovrascrittura per un file esistente
extra-widget Gtk.Widget r/w l’oggetto Gtk.FileFilter utilizzato per la visualizzazione dei files nel filechooser
filter Gtk.FileFilter r/w The current filter for selecting which files are displayed
local-only bool r/w un boolean per decidere se i file selezionati devono essere locali
preview-widget Gtk.Widget r/w un widget extra fornito da Application per le anteprime (previews) personalizzate
preview-widget-active bool r/w un boolean che setta se il widget extra fornito da Application per le previews debba essere visualizzato
select-multiple bool r/w un boolean che permette la selezione di file multipli (True)
show-hidden bool r/w un boolean per la visualizzazione di file nascosti (True)
use-preview-label bool r/w/td>

un boolean per visualizzare una stock label col il nome del file previewed

Segnali

I segnali principali sono:

Name Short Description
confirm-overwrite questo segnale viene emesso quando l’utente seleziona un file esistente ed è appropriato visualizzare un messaggio di conferma
current-folder-changed segnale emesso quando la directory corrente cambia
file-activated segnale emesso quando l’utente attiva un file nel filechooser
selection-changed segnale emesso quando la selezione di file, cambia
update-preview segnale emesso quando l’anteprima nel filechooser deve essere rigenerata

Metodi

Come già anticipato il widget Gtk.FileChooserDialog non possiede metodi propri.
Da Gtk.Dialog eredita:

add_buttons(*args)

Aggiunge multipli bottoni al dialog usando i dati relativi al bottone da aggiungere, ovvero il
button text (o uno STOCK_ID) e il tipo di response che questo button genera.
Questo metodo equivale a chiamare ripetutamente il metodo add_button.
I dati del bottone viaggiano in coppia, ad esempio per inserire 2 Buttons “OPEN” e “CLOSE”, faremo:

>>> dialog = Gtk.FileChooserDialog(title="Choose a file", action=Gtk.FileChooserAction.OPEN)
>>> dialog.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
...                    Gtk.STOCK_OK, Gtk.ResponseType.OK)

run()

Si blocca in un loop e rimane bloccato fino a che il filechooserdialog non emette un segnale
“response”, oppure viene distrutto.
Se il dialog viene distrutto durante la chiamata a Gtk.Dialog.run(), lo stesso
metodo ritorna un response di tipo Gtk.ResponseType.NONE.
Altrimenti ritorna il response_ID dall’emissione del segnale “response”.
Prima di entrare nel loop, Gtk.Dialog.run() chiama il metodo Gtk.Widget.show() sul dialog per visualizzarlo.

Dall’interfaccia Gtk.FileChooser eredita invece:

add_choice(id, label, options, option_labels)

Aggiunge una scelta (choice) al filechooser. Generalmente viene implementata come una combobox,
o per le scelte True/False con un checkbutton.
Possiamo selezionare un valore usando il metodo Gtk.FileChooser.set_choice(), prima che il dialog
sia visualizzato e possiamo recuperare il valore selezionato dall’utente, nell’handler del segnale
“response”, usando il metodo Gtk.FileChooser.get_choice().
Parametri:
id: un stringa (str) cheindica l’id della choice aggiunta;
label: la stringa visibile all’utente per la “choice” aggiunta;
options: una lista di stringhe di id relativi alle opzioni della
choice, o None per una choice di tipo True/False;
option_labels: una lista di stringhe corrispondenti ai precedenti ids.
La lunghezza della lista deve essere identica a quella di options;

add_filter(filter)

Aggiunge un filter alla lista dei filters che l’utente può selezionare dal menu nel filechooser.
Solo i file che passeranno questo filter, verranno visualizzati nel filechooser.
Parametri:
filter: l’oggetto di tipo Gtk.FileFilter,
che si occupa di filtrare i files.

add_shortcut_folder(folder)

Aggiunge una folder nella sezione scorciatoie del filechooser.
Parametri:
folder: la stringa che identifica il percorso della folder da aggiungere;

add_shortcut_folder_uri(uri)

Aggiunge una URI di una folder nella sezione scorciatoie del filechooser.
Parametri:
uri: la stringa che identifica la URI della directory da visualizzare nelle shortcuts del filechooser;

get_action()

Ritorna il tipo di “action” (Gtk.FileChooserAction)
impostata nel filechooser (vedere set_action(action) per i dettagli).

>>> dialog = Gtk.FileChooserDialog(title="File Chooser", parent=None,
...                                action=Gtk.FileChooserAction.OPEN)
>>> dialog.get_action()
<enum GTK_FILE_CHOOSER_ACTION_OPEN of type Gtk.FileChooserAction>

get_choice(id)

Ritorna la “choice” selezionata nel filechooser, con l’id passato come argomento (vedi add_choice()).
Parametri:
id: la stringa dell’ID della “choice” effettuata;

get_create_folders()

Ritorna True se il filechooser visualizza il bottone che permette di creare una nuova folder (attiva di default).

get_current_folder()

Ritorna il percorso completo della folder corrente, ovvero la folder che il filechooser visualizza.

get_current_folder_file()

Ritorna l’oggetto Gio.File della folder corrente del filechooser.

get_current_folder_uri()

Ritorna l’URI della folder corrente. Questa è la folder che il filechooser sta visualizzando.

get_current_name()

Ritorna il raw text della entry “Name” del filechooser.

get_do_overwrite_confirmation()

Ritorna True se il filechooser presenterà un boxdialog di conferma di sovrascrittura di un file esistente.

get_extra_widget()

Ritorna l’extra widget corrente del filechooser.

get_file()

Ritorna l’oggetto Gio.File del file selezionato. Se il filechooser è in modalità folder, ritorna appunto la folder selezionata.

get_filename()

Ritorna il nome del file selezionato (str), o None se nessun file è stato selezionato.
Se il filechooser è in modalità folder, ritorna la folder selezionata.

get_filenames()

Ritorna un oggetto GLib.SList contenente i nome di tutti i file selezionati (path assoluti e completi) e le subfolders della folder corrente.

get_files()

Ritorna un oggetto GLib.SList contenente un oggetto Gio.File per ogni file selezionato, o subfolders della folder corrente.

get_filter()

Ritorna il filtro corrente (Gtk.FileFilter), o None se non impostato.

get_local_only()

Ritorna True se solo i file locali possono essere selezinati.

get_preview_file()

Ritorna l’oggetto Gio.File relativo al file in anteprima (preview), o None se nessun file è selezionato.

get_preview_filename()

Ritorna il nome del file (str) che in anteprima (preview), o None se nessun file è selezionato.

get_preview_uri()

Ritorna la URI del file in anteprima, o None se nessun file è selezionato.

get_preview_widget()

Ritorna il widget corrente che si occupa dell’anteprima (preview), o None se non previsto.

get_preview_widget_active()

Ritorna True se il widget responsabile della preview è attivo.

get_select_multiple()

Ritorna True se è attiva la possibilità di selezionare file multiple.

get_show_hidden()

Ritorna True se il filechooser visualizza anche file e dirs nascoste.

get_uri()

Ritorna la URI selezionata. Se Gtk.FileChooser.set_local_only() è settato a True, ritorna una URI
locale per ogni FUSE locations. Se il filechooser è in modalità folder, ritorna la folder selezionata.

get_uris()

Ritorna una lista contenente le URIs di tutti i file selezionati e di tutte le subfolders della folder corrente.

get_use_preview_label()

Ritorna True se il filechooser visualizza una label con il nome del file in anteprima.

list_filters()

Ritorna una lista contenente i filtri selezionabili dall’utente, nel filechooser.

list_shortcut_folder_uris()

Ritorna una lista di URIs (str) relativi alle dirs presenti nelle shortcut folders (scorciatoie).

list_shortcut_folders()

Ritorna una lista di nomi di dirs (folders), o None se non ci sono “scorciatoie”.

remove_choice(id)

Rimuove la “choice” con nome “id”, aggiunta con il metodo Gtk.FileChooser.add_choice().
Parametri:
id: la stringa corrispondente alla choice che vogliamo rimuovere

remove_filter(filter)

Rimuove il filtro dalla lista di filters del filechooser.
Parametri:
filter: l’oggetto Gtk.FileFilter da rimuovere;

remove_shortcut_folder(folder)

Rimuove una folder dalla lista delle shortcuts.
Parametri:
folder: il nome (str) della folder da rimuovere dalle shortcuts.

remove_shortcut_folder_uri(uri)

Rimuove una URI di una folder dalla lista delle shortcuts.
Parametri:
uri: la URI (str) della folder da rimuovere;

select_all()

Seleziona tutti i file dell folder corrente visualizzata nel filechooser.

select_file(file)

Seleziona il file passato come argomento.
Parametri:
file: un oggetto Gio.File rappresentante il file da selezionare;

select_filename(filename)

Seleziona il file passato come argomento.
Parametri:
filename: il nome (str) del file da selezionare;

select_uri(uri)

Seleziona il file passato come argomento.
Parametri:
uri: la URI (str) del file da selezionare;

set_action(action)

Setta il tipo di operazione che il filechooser deve eseguire.
action è un enum di tipo Gtk.FileChooserAction
che può avere i seguenti valori:
OPEN (0): setta il dialog in modalità open, cioà lascia all’utente solo la
possibilità si scegliere un file;
SAVE (1): setta il dialog in modalità save, cioè la possibilità di salvare su un
file esistente o crearne uno nuovo;
SELECT_FOLDER (2): setta il dialog in modalità select folder, cioè la possibilità
di scegliere una folder esistente;
CREATE_FOLDER (3): setta il dialog in modalità create folder, cioè la possibilità
di creare una nuova dir;
Parametri:
action: l’enum Gtk.FileChooserAction da settare;

set_choice(id, option)

Seleziona un’opzione in una “choice”, aggiunta con il metodo Gtk.FileChooser.add_choice().
Se la “choice” è di tipo boolean, le opzioni possibili sono ovviamente “true” e “false”.
Parametri:
id: l’ID (str) della choice da settare;
option: l’ID (str) della opzione della choice da scegliere;

set_create_folders(create_folders)

Settata a True, visualizza un bottone “Create Folder” nel filechooser.
Parametri:
create_folders: un boolean che settato a True, visualizza il bottone “Create Folder”

set_current_folder(filename)

Setta la “current folder” nel filechooser e rende visibile tutto il suo contenuto.
Parametri:
filename: il full-path (str) della nuova folder corrente che vogliamo settare;

set_current_folder_file(file)

Setta la folder corrente da un oggetto Gio.File e ritorna True in caso di successo.
Parametri:
file: l’oggetto Gio.File utilizzato per settare la dir.

set_current_folder_uri(uri)
Setta la folder corrente da un URI e ritorna True in caso di successo.
Parametri:
uri: l’URI con cui settare la folder corrente;

set_current_name(name)

Setta il nome corrente nel file selector, come se fosse stato digitato dallo user.
In una situazione di “Save as”, funge da suggerimento preimpostato.
Parametri:
name: il filename da preimpostare (str);

set_do_overwrite_confirmation(do_overwrite_confirmation)

Setta il dialog di conferma quando si digita il nome di un file esistente in modalità
Gtk.FileChooserAction.SAVE.
Parametri:
do_overwrite_confirmation: il boolean che settato a True attiva la conferma di sovrascrittura;

set_extra_widget(extra_widget)

Setta un extra-widget per fornire allo user delle opzioni supplementari.
Parametri:
extra_widget: un oggetto Gtk.Widget per le opzioni extra;

set_file(file)

Setta il filename corrente nel filechooser partendo da un oggetto Gio.File, selezionandone la
parent folder e selezionando il file stesso nella lista.
Se siamo in modalità Gtk.FileChooserAction.SAVE il nome del file apparirà nella entry “file name”
del filechooser.
Parametri:
file: l’oggetto Gio.File da utilizzare per settare il file e la folder corrente;

set_filename(filename)

Setta il filename corrente nel filechooser partendo da una stringa, selezionandone la parent
folder e selezionando il file stesso nella lista.
Parametri:
filename: il file name da utilizzare per settare il file e la folder corrente;

set_filter(filter)

Setta il filter corrente nel filechooser.
Parametri:
filter: l’oggetto Gtk.FileFilter che si occuperà di filtrare i file da visualizzare nel filechooser.

set_local_only(local_only)

Setta se solo i file locali possono essere selezionati nel filechooser.
Parametri:
local_only: il boolean che settato a True permette di selezionare solo i file locali.

set_preview_widget(preview_widget)

Setta il widget dedicato alla visualizzazione dell’anteprima del file selezionato.
Per implementare un’anteprima, dopo aver settato il widget dedicato a tale compito, è necessario
connettersi al segnale “update-preview” e chiamare i metodi Gtk.FileChooser.get_preview_filename(),
o Gtk.FileChooser.get_preview_uri() ad ogni cambiamento e soprattutto rendere attivo il widget
con il metodo set_preview_widget_active(True).
Parametri:
preview_widget: l’oggetto Gtk.Widget dedicato alla preview;

set_preview_widget_active(active)

Se il widget per la preview, è stato settato con il metodo Gtk.FileChooser.set_preview_widget(),
settando a True, viene visualizzato per il nome file corrente.
Quando active=False, il filechooser tenta di visualizzare una anteprima generata internamente,
o può non visualizzare niente.
Parametri:
active: il boolean che attiva il widget preposto all’anteprima

set_select_multiple(select_multiple)

Setta la possibilità di selezionare multipli files.
Parametri:
select_multiple: il boolean che settato a True, attiva la selazione multiple;

set_show_hidden(show_hidden)

Setta la visualizzazione dei file nascosti.
Parametri:
show_hidden: il boolean che settato a True attiva la visualizzazione dei file nascosti;

set_uri(uri)

Setta il filename corrente nel filechooser partendo dalla URI, selezionandone la parent folder e
selezionando il file stesso nella lista.
Se siamo in modalità Gtk.FileChooserAction.SAVE il nome del file apparirà nella entry “file name”
del filechooser.
Parametri:
uri: la URI (str) da settare come file corrente;

set_use_preview_label(use_label)

Setta se il filechooser debba visualizzare o meno una stock-label con il nome del file in anteprima.
Se vogliamo che le applicazioni disegnino l’intera anteprima da sè, settare a False il boolean “use_label”.
Parametri:
use_label: il boolean che settato a True visualizza una stock-label con il file in anteprima;

unselect_all()

Deseleziona tutti i files.

unselect_file(file)

Deseleziona il file indicato dall’oggetto Gio.File, passato come argomento.
Parametri:
file: l’oggetto Gio.File che fa riferimento al file da deselezionare;

unselect_filename(filename)

Deseleziona il file indicato dalla nome passato come argomento.
Parametri:
filename: il nome del file (str) da deselezionare;

unselect_uri(uri)

Deseleziona il file indicato dalla URI passata come argomento.
Parametri:
uri: la URI del file (str) da deselezionare;

FileFilter

Una componente molto importante del FileChooserDialog è il filefilter che utilizziamo per filtrare
i file contenuti in una folder.
Il Gtk.FileFilter è un oggetto utilizzato per restringere le visualizzazioni all’interno di un
filechooser dialog.
Possiamo decidere di filtrare i file in base al proprio nome, utilizzando il metodo
Gtk.FileFilter.add_pattern()), in base al proprio mime type, utilizzando il metodo
Gtk.FileFilter.add_mime_type(), o con l’utilizzo di una funzione di filter,
con il metodo Gtk.FileFilter.add_custom().

Filtrare per mime types gestisce gli alias e le sottoclassi dei mime types, ad esempio filtrando
per text/plain visualizzerebbe anche mime type di tipo application/rtf,
inquanto application/rtf è una sottoclasse di text/plain.

Metodi

I metodi principali per il filter sono:

add_custom(needed, func, *data)

Un metodo che si appoggia ad una funzione personalizzata che testa il file con determinate regole,
se la funzione ritorna True, il file verrà visualizzato nel filechooser.
Parametri:
needed: un bitfield di tipo Gtk.FileFilterFlags,
ovvero il gruppo di flags indicanti le informazioni di cui ha bisogno la funzione del filtro
personalizzato.
Queste flags indicano quale parte del Gtk.FileFilterInfo
devono essere “riempite”. Le flags sono:
FILENAME (1): il nome del file che deve essere testato;
URI (2): la URI del file che deve essere testato;
DISPLAY_NAME (4): la stringa che verrà usata per visualizzare il file nel filechooser;
MIME_TYPE (8): il mime-type del file;

Il Gtk.FileFilterInfo, ovvero il bitfield (struct) usato per passare informazioni
sul file da testare, al filter, è infatti così strutturato:
“contains”: Flags indicante quali dei seguenti campi devono essere riempiti;
“display_name”: la stringa che verrà usata per visualizzare il file nel filechooser,
vedi la flag DISPLAY_NAME di Gtk.FileFilterFlags;
“filename”: il nome del file che deve essere testato, vedi la flag FILENAME di Gtk.FileFilterFlags;
“mime_type”: il mime-type del file che deve essere testato,
vedi la flag MIME-TYPE di Gtk.FileFilterFlags;
“uri”: la URI del file che deve essere testato, vedi la flag URI di Gtk.FileFilterFlags;

func: la callback che si occuperà del test.
Se ritorna True, il file verrà visualizzato nel filechooser;
data: i dati da passare alla callback;

add_mime_type(mime_type)

Aggiunge un mime-type come regola per il filter.
Parametri:
mime_type: il nome (str) del MIME type da utilizzare come filtro;

add_pattern(pattern)

Aggiunge un pattern come regola per il filter.
Parametri:
pattern: un glob (str) in stile shell, da utilizzare come filtro;

add_pixbuf_formats()

Aggiunge una regola che passi i file immagine nel formato supportato da GdkPixbuf.Pixbuf.

filter(filter_info)

Testa se un file debba essere visualizzato, in accordo con le regole settate nel filter.
L’oggetto Gtk.FileFilterInfo filter_info dovrebbe includere i cambi ritornati
con il metodo Gtk.FileFilter.get_needed().
Parametri:
filter_info: l’oggetto Gtk.FileFilterInfo) che contiene le
informazioni del file;

get_name()

Ritorna il nome del filter.

get_needed()

Ritorna i campi che devono essere compilati per l’oggetto Gtk.FileFilterInfo da passare a
Gtk.FileFilter.filter().

set_name(name)

Setta il nome del filter.
Parametri:
name: il nome da dare al filter;

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="FileChooser Example")
        self.set_default_size(250, 100)

        button1 = Gtk.Button(label="Choose File")
        button2 = Gtk.Button(label="Choose Folder")
        # Bindings
        button1.connect("clicked", self.on_file_clicked)
        button2.connect("clicked", self.on_folder_clicked)
        # Layout
        box = Gtk.Box(spacing=6)
        box.set_homogeneous(True)
        box.add(button1)
        box.add(button2)
        self.add(box)

    def on_file_clicked(self, widget):
        dialog = Gtk.FileChooserDialog(title="Choose a file", parent=self,
                                       action=Gtk.FileChooserAction.OPEN)
        dialog.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                           Gtk.STOCK_OK, Gtk.ResponseType.OK)
        # add dialog filters
        for name, pattern in [("Text files", "*.txt*"), ("all files", "*.*")]:
            filter = Gtk.FileFilter()
            filter.set_name(name)
            filter.add_pattern(pattern)
            dialog.add_filter(filter)
        response = dialog.run()
        if response == Gtk.ResponseType.OK:
            print("INFO: file selected > %s" % dialog.get_filename())
        elif response == Gtk.ResponseType.CANCEL:
            print("INFO: aborted.")
        dialog.destroy()

    def on_folder_clicked(self, widget):
        dialog = Gtk.FileChooserDialog(
            title="Choose a folder", parent=self,
            action=Gtk.FileChooserAction.SELECT_FOLDER)
        dialog.add_buttons(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
                           "Select", Gtk.ResponseType.OK)
        dialog.set_default_size(800, 400)
        response = dialog.run()
        if response == Gtk.ResponseType.OK:
            print("INFO: Folder selected > %s" % dialog.get_filename())
        elif response == Gtk.ResponseType.CANCEL:
            print("INFO: aborted.")
        dialog.destroy()


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 FileChooserDialog
Gtk3 FileChooser
Gtk3 FileFilter

Categorie:Gtk3, PyGObject, python Tag: , ,

PyGObject: Gtk.Clipboard

13 Aprile 2020 Commenti chiusi

torna all’indice appunti

Clipboard

L’oggetto Gtk.Clipboard offre un’area di storage per una moltitudine di dati,
testo ed immagini comprese. L’utilizzo del clipboard permette di condividere dati tra applicazioni
differenti, semplicemente con azioni come copia/taglia ed incolla.
Queste azioni si ottengono generalmente con le scorciatoie da tastiera, utilizzando oggetti
Gtk.MenuItem, e connettendo le funzioni ai widget Gtk.Button.
Ogni clipboard viene identificato da un nome codificato come un Gdk.Atom.
Il clipboard di default corrisponde all’atom “CLIPBOARD”; un’altro clipboard utilizzato di
frequente è il “PRIMARY”, che, in X, di solito contiene il testo selezionato.

Per creare un Clipboard si utilizza il costruttore Gtk.Clipboard(**kwargs).

Segnali

Il segnale di riferimento per Gtk.Clipboard è “owner-change”, che viene emesso quando GTK+ riceve
un evento che indica che la proprietà della selezione associata al clipboard è cambiata.

Metodi

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

get(selection)

Ritorna l’oggetto clipboard per la selezione data.
Parametri:
selection: un oggetto Gdk.Atom che identifica il
clipboard da usare;

>>> atom = Gdk.Atom.intern(atom_name="PRUMARY", only_if_exists=True)
>>> clipboard = Gtk.Clipboard.get(atom)

esistono anche delle costanti utilizzabili per lo stesso scopo, come ad esempio
Gdk.SELECTION_CLIPBOARD.

>>> newclipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)

get_default(display)

Ritorna il clipboard di default da usare con elementi che consentano azioni cut/copy/paste
e scorciatoie da tastiera (keyboard shortcuts).
Parametri:
display: è un oggetto Gdk.Display per il quale utilizziamo il clipboard;

>>> display = Gdk.Display.get_default()
>>> default_clipboard = Gtk.Clipboard.get_default(display)

get_for_display(display, selection)

Ritorna l’oggetto clipboard appropriato per la selezione data. Se non esiste alcun clipboard,
ne verrà creato uno nuovo. Una volta che il clipboard verrà creato, sarà persistente e di
proprietà di Gtk+.
Per elementi “Cut/copy/paste” e “keyboard shortcuts” dovrebbe essere usato sempre il default
clipboard, passando al costruttore selection=SELECTION_CLIPBOARD.
E’ possibile avere clipboard con nomi arbitrari, ma per convenzione si dovrebbe usare un
underscore come prefisso.
Parametri:
display: il Gdk.Display per il quale il clipboard viene richiesto
o creato;
selection: un Gdk.Atom che identifica il clipboard da usare;

clear()

Ripulisce il contenuto del clipboard.

get_display()

Ritorna l’oggetto Gdk.Display associato al clipboard.

get_owner()

Ritorna il proprietario del clipboard, se esiste, altrimenti None.

request_contents(target, callback, *user_data)

Richiede i contenuti del clipboard e una volta ricevuti, invoca la callback specificata.
Parametri:
target: l’oggetto Gdk.Atom rappresentante la forma nella quale il
proprietario del clipboard dovrebbe convertire la selezione;
callback: un oggetto Gtk.ClipboardReceivedFunc, ovvero una funzione
che viene invocata quando vengono ricevuti i risultati.
Se il recupero dei dati fallisce, il campo “length” di selection_data sarà negativo;
user_data: i dati da passare alla callback;

request_image(callback, *user_data)

Richiede il contenuto del clipboard come immagine. Quando l’immagine viene ricevuta, viene
convertita in GdkPixbuf.Pixbuf e la callback sarà invocata.
Il parametro pixbuf passato alla callback, conterrà il GdkPixbuf.Pixbuf
risultatante, se la richiesta avrà successo, altrimenti None.
Può infatti capitare che il clipboard sia vuoto, o contenga dati non convertibili in immagine.
Parametri:
callback: l’oggetto Gtk.ClipboardImageReceivedFunc, ovvero una
funzione da invocare quando l’immagine viene ricevuta;
user_data: i dati da passare alla callback;

request_rich_text(buffer, callback, *user_data)

Richede il contenuto del clipboard come rich text. Quando il risultato viene ricevuto,
viene invocata la callback passata come argomento. I parametri text e length
passati alla callback, conterranno rispettivamente il testo e la lunghezza dello stesso, in caso
di successo, altrimenti None.
Parametri:
buffer: l’oggetto Gtk.TextBuffer;
callback: un oggetto Gtk.ClipboardReceivedFunc, ovvero una funzione
che viene invocata quando vengono ricevuti i risultati;
user_data: i dati da passare alla callback;

request_targets(callback, *user_data)

Richiede il contenuto del clipboard come lista di targets supportati.
Una volta ricevuta la lista, viene invocata la callback.
Il parametro targets passato alla callback, conterrà i targets in caso di
successo della richiesta, o None in caso di fallimento.
Parametri:
callback: un oggetto Gtk.ClipboardReceivedFunc, ovvero una funzione
che viene invocata quando vengono ricevuti i risultati;
user_data: i dati da passare alla callback;

request_text(callback, *user_data)

Richiede il contenuto del clipboard come testo. Quando viene ricevuto, se necessario viene
convertito in UTF-8, dopodichè viene invocata la callback.
Il parametro text passato alla callback, conterrà il testo del clipboard.
in caso di successo, altrimenti None.
Parametri:
callback: un oggetto Gtk.ClipboardReceivedFunc, ovvero una funzione
che viene invocata quando vengono ricevuti i risultati;
user_data: i dati da passare alla callback;

request_uris(callback, *user_data)

Richiede il contenuto del clipboard come URIs. Una volta ricevuti, verrà invocata la callback.
Il parametro uris passato alla callback, conterrà la lista degli URIs in caso di
successo della richiesta, o None in caso di fallimento.
Parametri:
callback: un oggetto Gtk.ClipboardReceivedFunc, ovvero una funzione
che viene invocata quando vengono ricevuti i risultati;
user_data: i dati da passare alla callback;

set_can_store(targets)

Permette di salvare i dati del clipboard da quanlche parte, finchè l’applicazione esiste o quando
viene chiamato il metodo Gtk.Clipboard.store().
Questo valore viene resettato quando il proprietario del clipboard cambia.
Il luogo dove vengono salvati i dati dipende dal platform, a tal proposito vedere il metodo
Gdk.Display.store_clipboard.
Parametri:
targets: una lista di Gtk.TargetEntry,
contenente informazioni su che forms debbano essere salvati, o None, se tutte le forms debbano
essere salvate.

set_image(pixbuf)

Setta il contenuto del clipboard al GdkPixbuf.Pixbuf dato. GTK+ si prenderà la responsabilità di
rispondere alla richiesta ed eventualmente convertire l’immagine nel formato richiesto.
Parametri:
pixbuf: l’oggetto GdkPixbuf.Pixbuf da settare nel clipboard;

set_text(text, len)

Setta il contenuto del clipboard nella stringa specificata. GTK+ si prenderà la responsabilità
di rispondere alla richiesta ed eventualmente convertire il testo nel formato richiesto.
Parametri:
text: la stringa UTF-8 su cui settare il contenuto del clipboard;
len: la lunghezza del testo (int) da settare;

store()

Salva i dati del clipboard per potervi accedere ad applicazione terminata.

wait_for_contents(target)

Richiede i contenuti del clipboard usando il target dato. Questo metodo attende che i dati vengano
ricevuti usando il mainloop in modo che eventi, timeouts ecc, possano essere distribuiti durante l’attesa.
Parametri:
target: l’oggetto Gdk.Atom rappresentante la forma nella quale il
proprietario del clipboard, deve convertire la selezione;

wait_for_image()

Richiede i contenuti del clipboard come immagine e converte il risultato in GdkPixbuf.Pixbuf.
Questo metodo attende che i dati vengano ricevuti usando il mainloop in modo che eventi, timeouts
ecc, possano essere distribuiti durante l’attesa.

wait_for_rich_text(buffer)

Richiede i contenuti del clipboard come “rich text”. Questo metodo attende che i dati vengano
ricevuti usando il mainloop, in modo che eventi, timeouts, ecc, possano essere distribuiti durante
l’attesa.
Parametri:
buffer: un oggetto Gtk.TextBuffer;

wait_for_targets()

Ritorna True se sonon presenti targets (Gdk.Atom) nel clipboard, o None se assenti.
Se ritorna True, ritorna anche la lista dei targets.

wait_for_text()

Richiede il contenuto del clipboard come testo e lo converte in formato UTF-8, se necessario.
Questo metodo attende che i dati vengano ricevuti usando il mainloop, in modo che eventi,
timeouts, ecc, possano essere distribuiti durante l’attesa.

wait_for_uris()

Richiede il contenuto del clipboard come URIs.
Questo metodo attende che i dati vengano ricevuti usando il mainloop, in modo che eventi,
timeouts ecc, possano essere distribuiti durante l’attesa.

wait_is_image_available()

Test per accertarsi che ci sia un’immagine disponibile da incollare (paste).
Questo avviene richiedendo i targets atom e controllando che contenga uno dei targets immagine
supportati. Questo metodo attende che i dati vengano ricevuti usando il mainloop, in modo che
eventi, timeouts, ecc, possano essere distribuiti durante l’attesa.

wait_is_rich_text_available(buffer)

Test per accertarsi che ci sia un “rich text” disponibile da incollare (paste).
Questo avviene richiedendo i targets atom e controllando che contenga uno dei targets “rich text”
supportati. Questo metodo attende che i dati vengano ricevuti usando il mainloop, in modo che
eventi, timeouts, ecc, possano essere distribuiti durante l’attesa.
Parametri:
buffer: un oggetto Gtk.TextBuffer;

wait_is_target_available(target)

Controlla se un clipboard supporta i pasting data di un certo tipo.
Parametri:
target: un Gdk.Atom che indichi quale target cercare;

wait_is_text_available()

Test per accertarsi che ci sia testo disponibile da incollare (paste). Questo avviene richiedendo
i targets atom e controllando che contenga dei targets di testo supportati.

wait_is_uris_available()

Test per accertarsi che ci sia una lista di URI disponibile da incollare (paste). Questo avviene
richiedendo i targets atom e controllando che contenga uno dei targets URI.

Di seguito un codice d’esempio:

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


class GWindow(Gtk.Window):
    def __init__(self):
        super().__init__(title="Clipboard Example")
        self.set_default_size(400, 50)

        self.clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
        self.entry = Gtk.Entry()
        self.label = Gtk.Label()

        btn_c_text = Gtk.Button(label="Copy Text")
        btn_p_text = Gtk.Button(label="Paste Text")

        # layout
        box = Gtk.Box(spacing=6)
        box.set_homogeneous(True)
        box.pack_start(self.entry, True, True, 0)
        box.pack_start(btn_c_text, True, True, 0)
        box.pack_start(btn_p_text, True, True, 0)
        box.pack_start(self.label, True, True, 0)
        self.add(box)
        # bindings
        btn_c_text.connect("clicked", self.on_copy)
        btn_p_text.connect("clicked", self.on_paste)

    def on_copy(self, widget):
        text = self.entry.get_text()
        print("INFO: setting '%s' to clipboard..." % text)
        self.clipboard.set_text(text=text, len=-1)

    def on_paste(self, widget):
        text = self.clipboard.wait_for_text()
        if text:
            print("INFO: setting '%s' to label..." % text)
            self.label.set_text(text)
        else:
            print("INFO: No text on the clipboard.")


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 Clipboard

Categorie:Gtk3, PyGObject, python Tag: , ,

PyGObject: Gtk.CheckButton

13 Aprile 2020 Commenti chiusi

torna all’indice degli appunti

CheckButton

Il widget Gtk.CheckButton è un widget composto da un toggle button con a fianco una Label.
Quindi, come il Gtk.CheckButton, ha la particolarità di rimanere nello stato in cui è, fino a che
non viene ricliccato.
Quando lo stato del Gtk.CheckButton cambia, viene emesso il segnale “toggled”.
Lo stato del Gtk.CheckButton, si ottiene con il metodo get_active():

Per creare un CheckButton si utilizza il costruttore Gtk.CheckButton(*args, **kwargs),
dove gli argomenti più significativi sono “”label” e “image”.
label: è una stringa di testo visualizzata nel CheckButton
image: un oggetto Gtk.Image che rappresenta l’immagine sul CheckButton.

 
>>> cbutton = Gtk.CheckButton()
>>> cbutton
<Gtk.CheckButton object at 0xb4b9de3c (GtkCheckButton at 0x952b110)>

E’ possibile passare i parametri del widget in fase di costruzione, ma è possibile accedervi
e modificarli anche in seguito, utilizzando i metodi getter e setter get_property(property_name)
e set_property(property_name, property_value):

 
>>> cbutton.get_property("label")
>>> cbutton.set_property("label", "Button 1")
>>> cbutton.get_property("label")
'Button 1'

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

 
>>> cbutton.set_label("CheckButton 1")
>>> cbutton.get_label()
'CheckButton 1'

Per creare un CheckButton, esistono due metodi “scorciatoia”:
new_with_label(label): dove “label” è il testo del checkbutton;
new_with_mnemonic(label): dove “label” è il testo con l’underscore davanti al carattere “mnemonic”;

>>> button1 = Gtk.CheckButton.new_with_label(label="Button 1")
>>> button2 = Gtk.CheckButton.new_with_mnemonic(label="B_utton 2")

Image

Per inserire un’immagine all’interno del widget, creiamo prima un oggetto Gtk.Image e lo settiamo
nel widget che lo conterrà. Per recuperarla, si userà il getter specifico get_image()

 
>>> image = Gtk.Image.new_from_file("OK24.png")
>>> button1.set_image(image)
>>> button1.get_image() == image
True

Segnali

Per connettere un widget ad una callback, in modo che, quando viene emesso un segnale specifico,
quest’ultima venga invocata, si utilizza il metodo connect(signal, callback).
Il segnale che fondamentalmente interessa il CheckButton è “toggled”, ereditato dal widget
Gtk.ToggleButton. Viene emesso quando un CheckButton, che precedentemente non era selezionato,
viene cliccato (clicked()).
Per conoscere lo stato di un CheckButton, si utilizza il metodo get_active()

 
>>> def on_button_toggled(button):
...     if button.get_active():
...         state = "on"
...     else:
...         state = "off"
...     print("{} was turned {}".format(button.get_label(), state))
...     
>>> button1.connect("toggled", on_button_toggled)
60
>>> button1.clicked()
Button 1 was turned on
>>> button1.get_active()
True
>>> button1.clicked()
Button 1 was turned off
>>> button1.get_active()
False
>>> button2.get_active()
False

Metodi

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

new()

Metodo costruttore che crea un nuovo Gtk.CheckButton. I parametri possono essere settati
successivamente con i metodi setter dedicati (ad es. set_label(label);

new_with_label(label)

Crea un nuovo Gtk.CheckButton con una label di testo associata.
Parametri:
label: il testo della label del CheckButton;

new_with_mnemonic(label)

Crea un nuovo Gtk.CheckButton con una label di testo dove un underscore anticipa il carattere
che verrà utilizzato come “mnemonic”.

 
>>> button2 = Gtk.CheckButton.new_with_mnemonic(label="B_utton 2")

dove “u” sarà il mnemonic character per la scorciatoia da tastiera (ALT+u).
Parametri:
label: il testo del CheckButton contenente gli mnemonic;

get_active()

Ritorna lo stato del checkbutton.

get_inconsistent()

ritorna True, se il checkbutton si trova nello stato inconsistent, ovvero quella
fase nè selezionato, nè deselezionato.

set_active(is_active)

Setta lo stato del checkbutton. Se is_active è True, il checkbutton verrà visualizzato come
selezionato. False ovviamente setterà il checkbutton come deselezionato.
Parametri:
is_active: il boolean che seleziona/deseleziona il CheckButton;

set_inconsistent(is_inconsistent)

Setta lo stato del checkbutton a inconsistent, se is_inconsistent è True.
Parametri:
is_inconsistent: il boolean che setta il CheckButton in uno stato
“inconsistent”, ovvero nè selezionato, nè deselezionato;

toggled()

Emette un segnale di tipo “toggled”.

clicked()

Emette un segnale di tipo “clicked”.

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="CheckButton Demo")
        self.set_border_width(10)

        hbox = Gtk.Box(spacing=6)
        self.add(hbox)

        button1 = Gtk.CheckButton("Button 1")
        button2 = Gtk.CheckButton.new_with_mnemonic("B_utton 2")
        button2.set_active(True)
        # bindings
        button1.connect("toggled", self.on_button_toggled)
        button2.connect("toggled", self.on_button_toggled)
        button2.set_inconsistent(True)
        # layout
        hbox.pack_start(button1, True, True, 0)
        hbox.pack_start(button2, True, True, 0)

    def on_button_toggled(self, button):
        if button.get_active():
            state = "on"
        else:
            state = "off"
        print("{} was turned {}".format(button.get_label(), state))


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 CheckButton

Categorie:Gtk3, PyGObject, python Tag: , ,

PyGObject: Gtk.Entry

13 Aprile 2020 Commenti chiusi

torna all’indice appunti

Entry

Il widget Gtk.Entry è un widget che permette di inserire testo in single-line.
Per creare una Entry si utilizza il costruttore Gtk.Entry(**kwargs).
Come per tutti gli altri widgets visti fino ad ora, è 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):

Le properties principali del widget Gtk.Entry sono:

Name Type Flags Short Description
activates-default bool r/w/en se attivare il widget di default (es. il default button di un dialog) quando si preme Enter
attributes Pango.AttrList r/w/en Una lista di style attributes da applicare al testo della label
buffer Gtk.EntryBuffer r/w/c/en l’oggetto Text buffer che ha in carico il testo della entry
caps-lock-warning bool r/w/en se in caso di password viene mostrato un avviso con Caps Lock attivo
completion Gtk.EntryCompletion r/w/en L’oggetto ausiliario per il completion (completamento)
cursor-position int r La posizione corrente del cursore, in caratteri
editable bool r/w/en Se il contenuto della entry può essere editato
enable-emoji-completion bool r/w/en Se è attivo il suggerimento Emoji
has-frame bool r/w/en Se False, rimuove il bordo esterno della entry
im-module str r/w/en Quale modulo IM (Input Method) deve essere usato
input-hints Gtk.InputHints r/w/en Hints per il comportamento del text field
input-purpose Gtk.InputPurpose r/w/en Scopo del text field
invisible-char int r/w/en Il carattere da usare quando mascheriamo il contenuto della entry(es. “password mode”)
invisible-char-set bool r/w Se l'”invisible character” è stato settato
max-length int r/w/en Massimo numero di caratteri per la entry. 0 se nessun massimo è settato
max-width-chars int r/w/en La massima larghezza desiderata per la entry, in caratteri
overwrite-mode bool r/w/en Se il nuovo testo sovrascrive quello esistente
placeholder-text str r/w/en Mostra un testo suggeritore quando la entry è vuota e senza focus
populate-all bool r/w/en Se emette il segnale “populate-popup” grazie ai popups
primary-icon-activatable bool r/w/en Se la primary icon è attivabile
primary-icon-gicon Gio.Icon r/w/en la Gio.Icon utilizzata per la primary icon
primary-icon-name str r/w/en Il nome della icona per la primary icon
primary-icon-pixbuf GdkPixbuf.Pixbuf r/w/en Il Primary pixbuf per la entry
primary-icon-sensitive bool r/w/en Se la primary icon è sensitive
primary-icon-storage-type Gtk.ImageType r Lo storage-type usato per la primary icon
primary-icon-tooltip-markup str r/w/en il testo markup del tooltip sulla primary icon
primary-icon-tooltip-text str r/w/en il testo del tooltip sulla primary icon
progress-fraction float r/w/en Il progresso corrente del totale completato (es. inserimento dato)
progress-pulse-step float r/w/en La frazione del lavoro totale da muovere come “bouncing block” ad ogni chiamata di Gtk.Entry.progress_pulse()
scroll-offset int r/en Numero di pixels della entry che può scorrere sulla sinistra (out of the screen)
secondary-icon-activatable bool r/w/en Se la secondary icon è attivabile
secondary-icon-gicon Gio.Icon r/w/en La Gio.Icon per la secondary icon
secondary-icon-name str r/w/en Il nome dell’icona per la secondary icon
secondary-icon-pixbuf GdkPixbuf.Pixbuf r/w/en Il Secondary pixbuf per la entry
secondary-icon-sensitive bool r/w/en Se la secondary icon è sensitive
secondary-icon-storage-type Gtk.ImageType r Lo storage-type per la secondary icon
secondary-icon-tooltip-markup str r/w/en il testo markup del tooltip sulla secondary icon
secondary-icon-tooltip-text str r/w/en il testo del tooltip sulla secondary icon
selection-bound int r La posizione del margine opposto della selezione, dal cursore in caratteri
show-emoji-icon bool r/w/en Se mostrare una icona per le Emoji
tabs Pango.TabArray r/w/en Un lista di posizioni di tabstop da applicare al testo della entry
text str r/w/en Il contenuto della entry
text-length int r La lunghezza del testo corrente della entry
truncate-multiline bool r/w/en Se troncare le multiline quando incolliamo su una linea
visibility bool r/w/en se False visualizza l’invisible str invece del testo (password mode)
width-chars int r/w/en Larghezza della entry in caratteri
xalign float r/w/en L’allineamento orizzontale da 0 (sinistra) a 1 (destra)
 
>>> import gi
... gi.require_version('Gtk', '3.0')
... from gi.repository import Gtk
... 
>>> entry = Gtk.Entry()
>>> entry.set_property("text", "some text")
>>> entry.get_property("text")
'some text'

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

 
>>> entry.set_text("another text")
>>> entry.get_text()
'another text'

Segnali

I segnali principali sono:

Name Short Description
activate il segnale “activate” viene emesso quando l’utente preme il tasto “Invio”
backspace il segnale “backspace” è un keybinding-signal che viene emesso quando l’utente preme il tasto “BackSpace”;
copy-clipboard il segnale “copy-clipboard” è anche esso un keybinding-signal, emesso quando si copia una selezione sul clipboard;
cut-clipboard il segnale “cut-clipboard” è simile al precedente, ma viene emesso nell’operazione di “taglia”;
delete-from-cursor il segnale “delete-from-cursor” è emesso quando l’utente inizia a cancellare il testo;
icon-press il segnale “icon-press” viene emesso quando si clicca sulla icona della entry;
icon-release il segnale “icon-release” viene emesso al rilascio del button quando si clicca sull’icona della entry;
insert-at-cursor il segnale “insert-at-cursor” viene emesso quando l’utente inizia l’inserimento al cursore, di una stringa;
insert-emoji il segnale “insert-emoji” viene emesso quando si utilizza, nella entry, il chooser delle Emoji;
move-cursor il segnale “move-cursor” viene emesso quando viene mosso il cursore nella entry;
paste-clipboard il segnale “paste-clipboard” viene emesso quando si incolla il contenuto copiato/tagliato, sul clipboard;
populate-popup il segnale “populate-popup” viene emesso prima che venga visualizzato il context-menu della entry;
preedit-changed se viene usato un input method, il testo digitato non verrà immediatamento spedito al buffer;
toggle-overwrite il segnale “toggle-overwrite” viene emesso quando si ha il toggle sull’overwrite mode della entry.

Metodi

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

new()

Metodo costruttore che crea una nuova Gtk.Entry.

new_with_buffer(buffer)

Metodo costruttore che crea una nuova Gtk.Entry con il text buffer specificato.
Buffer è un oggetto Gtk.EntryBuffer, che
contiene il testo visualizzato nella entry e può essere condiviso con altri oggetti Gtk.Entry.

>>> import gi
... gi.require_version('Gtk', '3.0')
... from gi.repository import Gtk, GLib
>>> entry = Gtk.Entry(text="some text")
>>> buffer = entry.get_buffer()
>>> buffer.get_text()
'some text'
>>> entry2 = Gtk.Entry.new_with_buffer(buffer)
>>> entry2.get_text()
'some text'

get_activates_default()

Ritorna il valore settato con il metodo set_activates_default().

get_alignment()

Ritorna il valore dell’allineamento settato con il metodo set_alignment().
Il valore di default è 0.0, ovvero allineamento a sinistra.
Allineamento a destra ha valore 1.0.

get_attributes()

Ritorna la lista degli attributi settati con il metodo set_attributes()

get_buffer()

Ritorna l’oggetto Gtk.EntryBuffer che detiene il testo contenuto nella entry.

get_completion()

Ritorna l’oggetto Gtk.EntryCompletion in uso.
Tale oggetto, come suggerisce il nome, fornisce la funzione di completamento, durante la
digitazione nella entry.

get_icon_name(icon_pos)

Ritorna il nome dell’icona utilizzata, o None se assente.
Ritorna None anche in caso l’icona sia stata settata con altri metodi
(es. pixbuf, stock o gicon).
icon_pos è un enum Gtk.EntryIconPosition che può assumere i seguenti valori:
PRIMARY (0): all’inizio della entry (dipende dalla direzione del testo);
SECONDARY (1): alla fine della entry dipende dalla direzione del testo);
Parametri:
icon_pos: la Gtk.EntryIconPosition cioè la posizione dell’icona;

get_icon_pixbuf(icon_pos)

Ritorna l’oggetto GdkPixbuf.Pixbuf presente in posizione icon_pos (Gtk.EntryIconPosition).
Diversamente dagli altri metodi getter e setter relativi all’icona, questo metodo
funzionerà indipendentemente dal fatto che l’icona sia stata settata usando un GdkPixbuf.Pixbuf,
un Gio.Icon, uno stock item, o un icon name.
Parametri:
icon_pos: la Gtk.EntryIconPosition cioè la posizione dell’icona;

get_icon_sensitive(icon_pos)

Ritorna True se l’icona appare “sensitive” o “insensitive”
Parametri:
icon_pos: la Gtk.EntryIconPosition cioè la posizione dell’icona;

get_icon_storage_type(icon_pos)

Ritorna il tipo di rappresentazione usata per salvare l’immagine (Gtk.ImageType).
Se l’icona non ha dati-immagine, il valore ritornato sarà di tipo Gtk.ImageType.EMPTY.
Parametri:
icon_pos: la Gtk.EntryIconPosition cioè la posizione dell’icona;

get_icon_tooltip_markup(icon_pos)

Ritorna il testo (markup) contenuto nel tooltip relativo all’icona, in posizione “icon_pos”,
o None.
Parametri:
icon_pos: la Gtk.EntryIconPosition cioè la posizione dell’icona;

get_icon_tooltip_text(icon_pos)

Ritorna il testo contenuto nel tooltip relativo all’icona, in posizione “icon_pos”, o None.
Parametri:
icon_pos: la Gtk.EntryIconPosition cioè la posizione dell’icona;

get_input_hints()

Ritorna il valore della property “input-hints”.

get_input_purpose()

Ritorna il valore della property “input-purpose”.

get_invisible_char()

Ritorna il carattere utilizzato per nascondere il testo (ad esempio nell’inserimento password).
Di Default viene utilizzato il pallino nero, ma può essere settato utilizzando il
metodo set_invisible_char().

>>> entry = Gtk.Entry()
>>> entry.get_invisible_char()
'●'
>>> entry.set_invisible_char("*")
>>> entry.get_invisible_char()
'*'

get_layout()

Ritorna l’oggetto Pango.Layout usato per visualizzare la entry.

get_layout_offsets()

Ritorna la posizione del Pango.Layout usato per il render del testo all’interno della entry.

get_max_length()

Ritorna il massimo numero di caratteri ammessi, o 0 se non c’è un valore massimo.

get_max_width_chars()

Ritorna il valore massimo della larghezza, in caratteri, della entry.

get_overwrite_mode()

Ritorna il valore settato con set_overwrite_mode(), cioè se il testo viene sovrascritto quando
digitiamo nella entry (True).

get_placeholder_text()

Ritorna la stringa che rappresenta il placeholder (suggerimento) della entry.

get_progress_fraction()

Ritorna il rapporto di completamento rispetto all’ valore settato con set_progress_fraction().

get_progress_pulse_step()

Ritorna il pulse step settati con set_progress_pulse_step().

get_tabs()

Ritorna i tabstops settati precedentemente
con il metodo set_tabs(), o None.

get_text()

Ritorna il testo contenuto nella entry.
E’ l’equivalente della chiamata al metodo Gtk.EntryBuffer.get_text().

get_text_area()

Ritorna un oggetto Gdk.Rectangle rappresentante l’area dove il testo della entry, viene disegnato.

get_text_length()

Ritorna il numero di caratteri nella entry, o 0 se assenti.
E’ equivalente alla chiamata al metodo Gtk.EntryBuffer.get_length().

>>> entry.set_text("some text")
>>> entry.get_text_length()
9
>>> entry.get_buffer().get_length()
9

get_visibility()

Ritorna True, se il testo nella entry è visibile, altrimenti None

get_width_chars()

Ritorna il valore settato con set_width_chars(), ovvero il numero di caratteri che conterrà la entry.
Questo ovviamente modifica la larghezza della entry, larghezza che verrà modificata anche dal tipo
di impacchettamento che verrà riservato al widget.

grab_focus_without_selecting()

Sposta il keyboard focus sulla entry.
Si comporta come il metodo Gtk.Widget.grab_focus(), senza selezionare il contenuto della entry.

im_context_filter_keypress(event)

Permette all’input method della entry, di gestire internamente gli eventi key press e key release.
Se ritorna True, l’evento “event” non verrà processato ulteriormente.
Event è un oggetto di tipo Gdk.EventKey.
Questo metodo dovrebbe essere chiamato dal nostro handler quando sovrascriviamo un determinato
key event handling. E’ necessario nel caso si voglia inserire il proprio key handling,
tra l’input method e il key event di default.

layout_index_to_text_index(layout_index)

Passando un layout_index (int), ritorna il byte index corripondente del contenuto della entry.
Parametri:
layout_index: il byte index nel text layout della entry;

progress_pulse()

Indica che è avvenuto un progresso parziale, ma non quale percentuale.
In pratica un progress-indicator segnala un’attività muovendosi avanti e indietro.
Per modificare la larghezza dell’indicatore durante il pulse, usare il metodo
Gtk.Entry.set_progress_pulse_step().

reset_im_context()

Resetta il context dell’input method. Può essere necessario quando la modifica del buffer,
incasini il comportamento dell’input method.

set_activates_default(setting)

Se settings = True, quando premiamo Enter nella entry, verrà attivato il
widget di default della window. Di solito significa che se è un dialog box che contiene la entry
sulla quale stiamo scrivendo, questo verrà chiuso, inquanto il default widget della window, molto
probabilmente, è un bottone che ha aperto il dialog box stesso.
setting: il boolean che settato a True attiva il default widget
quando premiamo Enter;

set_alignment(xalign)

Setta l’alignment orizzontale della entry.
Parametri:
xalign: è un float che va da 0.0 (allineamento a sinistra) a 1.0
(allineamento a destra);

set_attributes(attrs)

Setta un oggetto Pango.AttrList.
Gli attributi di questa lista saranno applicati al text della entry.
Parametri:
attrs: la lista di attributi Pango.AttrList;

set_buffer(buffer)

Setta l’oggetto Gtk.EntryBuffer che gestisce il testo della entry.

>>> entry = Gtk.Entry(text="some text")
>>> buffer = entry.get_buffer()
>>> buffer.get_text()
'some text'
>>> entry2 = Gtk.Entry.new_with_buffer(buffer)
>>> entry2.get_text()
'some text'

Parametri:
buffer: il Gtk.EntryBuffer che gestisce il testo della entry;

set_completion(completion)

Setta l’oggetto Gtk.EntryCompletion
da utilizzare per la funzione di completamento, durante la digitazione nella entry.
Parametri:
completion: The Gtk.EntryCompletion utilizzato per il completamento,
o None;

set_has_frame(setting)

Se setting = True (impostazione di default), la entry avrà un frame arrotondato,
altrimenti rettangolare.
Parametri:
setting: il boolean che abilita/disabilita il bordo della entry;

set_icon_activatable(icon_pos, activatable)

Se activatable = True, l’icona in posizione “icon_pos” sarà attivabile.
Parametri:
icon_pos: la Gtk.EntryIconPosition cioè la posizione dell’icona;
activatable: il boolean che rende la icon specificata (primary o
secondary) attivabile o meno;

set_icon_drag_source(icon_pos, target_list, actions)

Setta l’icona alla posizione data cosicchà quando l’utente cliccherà e trascinerà l’icona, Gtk+ inizierà l’operazione di Drag.
Per gestire l’operazione di Drag dobbiamo conneterci al solito segnale “drag-data-get” (o possibilmente al segnale “::drag-data-delete”),
e usare il metodo get_current_icon_drag_source() nel nostro signal handler, per scoprire se il drag è cominciato da un’icona.
Parametri:
icon_pos: la Gtk.EntryIconPosition cioè la posizione dell’icona;
target_list: è un oggetto Gtk.TargetList contenente i target ovvero
i formati nei quali possono essere forniti i dati.
actions: è un oggetto Gdk.DragAction ovvero un bitmask delle drag
actions concesse.

set_icon_from_gicon(icon_pos, icon)

Setta l’icona visualizzata nella entry, alla posizione specificata.
Se l’icona è sconosciuta, verrà utilizzata un’icona “broken image”.
Se icon = None, nessuna icona verrà visualizzata nella entry.
Parametri:
icon_pos: la Gtk.EntryIconPosition cioè la posizione dell’icona;
icon: l’oggetto Gio.Icon dell’icona da settare, o None;

set_icon_from_icon_name(icon_pos, icon_name)

Setta l’icona visualizzata nella entry, alla posizione specificata.
Se l’icona è sconosciuta, verrà utilizzata un’icona “broken image”.
Se icon = None, nessuna icona verrà visualizzata nella entry.
Parametri:
icon_pos: la Gtk.EntryIconPosition cioè la posizione dell’icona;
icon_name: un stringa rappresentante l’icona desiderata, o None;

Una corposa lista di icone può essere reperita qui

set_icon_from_pixbuf(icon_pos, pixbuf)

Setta l’icona visualizzata alla posizione desiderata, utilizzando un pixbuf.
Se pixbuf = None, nessuna icona verrà visualizzata
Parametri:
icon_pos: la Gtk.EntryIconPosition cioè la posizione dell’icona;
pixbuf: l’oggetto GdkPixbuf.Pixbuf, o None

set_icon_sensitive(icon_pos, sensitive)

Setta la sensitività per l’icona specificata, ovvero sensibile al click del mouse;
Parametri:
icon_pos: la Gtk.EntryIconPosition cioè la posizione dell’icona;
sensitive: True (default) se vogliamo che l’icona
appaia sensitiva al puntatore, False per inibirla;

set_icon_tooltip_markup(icon_pos, tooltip)

Setta il tooltip (markup) per l’icona nella posizione specificata.
Parametri:
icon_pos: la Gtk.EntryIconPosition cioè la posizione dell’icona;
tooltip: la testo markup del tooltip da assegnare all’icona;

>>> entry.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, "system-search-symbolic")
>>> entry.set_icon_tooltip_markup(Gtk.EntryIconPosition.PRIMARY, "<b>S</b>earch")
>>> entry.get_icon_tooltip_markup(Gtk.EntryIconPosition.PRIMARY)
'<b>S</b>earch'

set_icon_tooltip_text(icon_pos, tooltip)

Setta il tooltip (solo testo) per l’icona nella posizione specificata.
Parametri:
icon_pos: la Gtk.EntryIconPosition cioè la posizione dell’icona;
tooltip: la testo del tooltip da assegnare all’icona;

set_input_hints(hints)

Setta la property “input-hints” che permette agli input-methods di essere più specifici.
Parametri:
hints: l’oggetto Gtk.InputHints;

set_input_purpose(purpose)

Setta la property “input-purpose”, usata dalle tastiere on-screen e altri input methods.
Parametri:
purpose: l’oggetto Gtk.InputPurpose;

set_invisible_char(ch)

Setta il carattere da utilizzare al posto dei caratteri digitati, quando viene utilizzato
set_visibility(False), ovvero si rende il testo della entry, invisibile (“password mode”).
Di deafult GTK+ prende il carattere che nasconda di più quello sottostante.
Parametri:
ch: il carattere Unicode usato per il mask;

>>> newentry = Gtk.Entry()
>>> newentry.set_visibility(False)
>>> newentry.get_invisible_char()
'●'

set_max_length(max)

Setta la massima lunghezza del contenuto della entry. Se il contenuto eccede questo valore,
verrà troncato.
Parametri:
max: la massima lunghezza della entry;

>>> entry.set_max_length(3)
>>> entry.set_text("Some text")
>>> entry.get_text()
'Som'

set_max_width_chars(n_chars)

Setta il valore massimo della larghezza della entry, in caratteri.
Parametri:
n_chars: la massima lunghezza desiderata della entry;

set_overwrite_mode(overwrite)

Se overwrite = True, quando digitiamo nella entry, il viene sovrascritto (INS).
Parametri:
overwrite: il boolean che abilita/disabilita l’overwrite mode
della entry;

set_placeholder_text(text)

Setta il placeholder (suggerimento di cosa ci si aspetta venga inserito), che appare nella entry
quando è vuota o non ha il focus.
Parametri:
text: il testo del placeholder da settare nella entry;

set_progress_fraction(fraction)

Causa il riempimento del progress-indicator.
Parametri:
fraction: il float che indica di quanto riempire il progress
indicator e va da 0.0 a 1.0.

set_progress_pulse_step(fraction)

Setta a “fraction” la frazione della entry che rimbalzerà ad ogni chiamata di progress_pulse().
Parametri:
fraction: la frazione del totale che rappresenta il blocco che si
muoverà durante il bouncing;

set_tabs(tabs)

Setta un Pango.TabArray che contiene i tabstops che verranno applicati al testo della entry.
Parametri:
tabs: l’oggetto Pango.TabArray, ovvero la lista dei tabstops;

set_text(text)

Setta il testo nella entry
Parametri:
text: il testo da settare nella entry;

set_visibility(visible)

Setta se il contenuto della entry deve essere visibile (True).
Di default GTK+ prende il miglior “invisible character” disponibile nel font in uso
Nel caso di utilizzo con visible=False, sarebbe meglio settare le property “input-purpose” a
Gtk.InputPurpose.PASSWORD, o Gtk.InputPurpose.PIN per rafforzare il reale intento di questa entry.
Parametri:
visible: il boolean che visualizza o meno il testo come plain-text;

set_width_chars(n_chars)

Modifica il size richiesto della entry. Questo settaggio modifica il size, ma viene a sua volta
modificato da come decidiamo di “impacchettare” il widget nei contenitori che lo ospiteranno.
Parametri:
n_chars: la larghezza della entry in caratteri;

text_index_to_layout_index(text_index)

Converte da una posizione nel contenuto della entry, ad una posizione nel Pango.Layout della entry.
Parametri:
text_index: il byte index nel contenuto della entry;

unset_invisible_char()

Resetta l’invisible char settato con set_invisible_char() in modo che torni ad essere utilizzato
il char di default scelto in base al font in uso.

Pango’s Markup Language

Per tutto quello che concerne il Pango’s Markup Language, descrizione, sintassi e abbreviazioni,
fare riferimento alla pagina di Gnome Developers

Di seguito un codice d’esempio:

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


class GWindow(Gtk.Window):
    def __init__(self):
        super().__init__(title="Entry example")
        self.set_size_request(200, 50)
        entry = Gtk.Entry()
        entry.set_placeholder_text("search")
        entry.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY,
                                      "system-search-symbolic")
        entry.set_icon_tooltip_markup(Gtk.EntryIconPosition.PRIMARY,
                                      "type <span foreground='Red'>word</span>")
        # bindings
        entry.connect("notify::text", self.on_entry)
        # layout
        vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6)
        self.add(vbox)
        vbox.pack_start(entry, True, True, 0)

    def on_entry(self, entry, *args):
        print("INFO: searching for %s..." % entry.get_text())


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

Nota:

Per catturare il testo digitato ad ogni pressione di un tasto, è utile connettersi al segnale
“notify::property_name”, che come ricordiamo viene emesso ogni qualvolta una property di un
widget, viene modificata.

link di riferimento:

torna all’indice degli appunti
Gtk3 Entry

Categorie:Gtk3, PyGObject, python Tag: , ,