Il widget Gtk.Button viene generalmente collegato ad una callback che viene invocata quando lo
stesso widget viene premuto.
Come accade per altri widget, il Gtk.Button può contenere altri widget (child), come ad esempio
Testi (Label) o immagini.
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):
Name |
Type |
Flags |
Short Description |
always-show-image |
bool |
r/w/c/en |
Se l’immagine verrà sempre visualizzata |
image |
Gtk.Widget |
r/w/en |
Il Child widget visualizzato a fianco del testo del button |
image-position |
Gtk.PositionType |
r/w/en |
La posizione dell’immagine relativamente al testo |
label |
str |
r/w/c/en |
Il testo del widget label nel button (se il button ne contiene una) |
relief |
Gtk.ReliefStyle |
r/w/en |
Lo stile del bordo del button |
use-underline |
bool |
r/w/c/en |
Se settato, l’underline prima di un carattere, ne identifica il mnemonic accelerator key |
Image
Per inserire un’immagine all’interno del widget, creiamo prima un oggetto Gtk.Image e lo settiamo
nel widget che lo conterrà:
>>> btn_ok = Gtk.Button(label="Click")
>>> image = Gtk.Image.new_from_file("OK24.png")
>>> btn_ok.set_image(image)
>>> btn_ok.get_image()
<Gtk.Image object at 0xb4a36dec (GtkImage at 0x88ea460)>
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):
>>> def on_click(button):
... print("Button '%s' was clicked!" % button.get_label())
...
>>> btn_ok.connect("clicked", on_click)
104
>>> btn_ok.clicked()
Button <Click> was clicked!
Come si nota, con il metodo clicked() abbiamo emesso il segnale “clicked” e la
callback è stata invocata. Questo corrisponde alla pressione del Button.
L’Integer ritornato dal metodo coonect(), invece, è l’ID-Handler che gestisce appunto la connessione
segnale-callback.
Con lo stesso ID, sarà infatti possibile disconnettere la callback dal segnale:
>>> btn_ok.disconnect(104)
>>> btn_ok.clicked()
Metodi
Di seguito i metodi utilizzabili con il widget Gtk.Button:
clicked()
emette un segnale di tipo “clicked”.
get_alignment()
ritorna l’allineamento orizzontale (xalign) e quello verticale (yalign) del widget;
“xalign” può assumere i valori: 0.0 per allineamento a sinistra, 1.0 per allineamento a destra;
“yalign” può assumere i valori: 0.0 per allineamento in alto, 1.0 per allineamento in basso;
0.5 ovviamente sta per centrato, sia orizzontalmente che verticalmente.
>>> btn_ok.get_alignment()
(xalign=0.5, yalign=0.5)
get_focus_on_click()
ritorna True se il Button dopo il click, trattiene il focus.
get_image()
ritorna l’oggetto Image utilizzato nel Button o None se assente;
get_image_position()
ritorna la posizione dell’immagine all’interno del widget.
>>> btn_ok.get_image_position()
<enum GTK_POS_LEFT of type Gtk.PositionType>
get_label()
ritorna il testo associato al Button.
get_relief()
ritorna lo stile “relief” settato per il Button.
get_use_underline()
ritorna True se viene utilizzato il mnemonic underline (accelerator key).
new()
E’ un metodo costruttore, crea un nuovo Gtk.Button.
In seguito possono essere settati i parametri (es. la Label), con i setter dedicati.
set_alignment(xalign, yalign)
setta l’allineamento del child. I valori di allineamento sono:
0.0 per allineamento a sinistra, 1.0 per allineamento a destra, 0.0 per allineamento in alto, 1.0
per allineamento in basso. Per l’allineamento centrato, si utilizza ovviamente 0.5.
I parametri sono:
xalign: il valore di allineamento orizzontale;
yalign: il valore di allineamento verticale;
set_always_show_image(always_show)
Settato a True, il Button visualizzerà sempre l’immagine (se disponibile), sovrascrivendo nel caso,
il Gtk.Settings “gtk-button-images”.
I parametri sono:
always_show: il boolean che a True visualizza sempre l’immagine;
set_image(image)
setta l’immagine nel Button.
I parametri sono:
image: il widget da settare come immagine;
set_image_position(position)
setta la posizione dell’immagine, rispetto al testo del Button.
Position è un enum di tipo Gtk.PositionType e può assumere i seguenti valori;
LEFT (0): immagine a sinistra rispetto al testo;
RIGHT (1): immagine a destra ridpetto al testo;
TOP (2): immagine sopra e testo sotto;
BOTTOM (3): immagine sotto e testo sopra:
>>> btn_ok.set_image_position(Gtk.PositionType(1))
>>> btn_ok.get_image_position()
<enum GTK_POS_RIGHT of type Gtk.PositionType>
I parametri sono:
position: l’enum Gtk.PositionType della posizione dell’immagine
rispetto al testo del Button;
set_relief(relief)
setta il “relief” style del Button. Il relief style può assumere i seguenti valori:
Gtk.ReliefStyle.NORMAL e Gtk.ReliefStyle.NONE.
I parametri sono:
relief: enum Gtk.ReliefStyle che indica il relief style del button;
set_use_underline(use_underline)
se “use_underline” è True, viene indicata con una sottolineatura, il carattere che dovrebbe essere
usato come accelerator key (il carattere nella label è anticipato da un underscore);
I parametri sono:
use_underline: il boolean che visualizza le accelerator keys;
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, controller=None):
self.controller = controller
super().__init__(title="Gtk3 Button")
self.set_default_size(width=300, height=50)
self.set_border_width(5) # sets space around the inner widget (hbox)
btn_ok = Gtk.Button.new_with_label("Click")
image = Gtk.Image.new_from_file("OK24.png")
btn_ok.set_image(image)
btn_close = Gtk.Button.new_with_label("Close")
hbox = Gtk.Box(spacing=3) # spacing tra widgets
self.add(hbox)
# layout
hbox.pack_start(child=btn_ok, expand=True, fill=True, padding=0)
hbox.pack_start(child=btn_close, expand=True, fill=True, padding=0)
hbox.set_homogeneous(True)
# bindings
btn_ok.connect("clicked", self.on_click)
btn_close.connect("clicked", self.on_close)
@staticmethod
def on_click(button):
label = "Click" if button.get_label() == "Clicked" else "Clicked"
button.set_label(label=label)
print("'%s' button was clicked" % label)
@staticmethod
def on_close(button):
label = button.get_label()
print("'%s' button was clicked" % label)
Gtk.main_quit()
if __name__ == "__main__":
win = GWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
link di riferimento:
torna all’indice appunti
Gtk3 Button
I commenti sono chiusi.
Commenti recenti