Cambiare la descrizione di un pulsante Stock

Pulsante Stock con etichetta personalizzata

Osservato il funzionamento del sistema di packing diverrà più semplice comprendere il modo di modificare un pulsante Stock che normalmente, assieme alla sua icona, acquisisce anche la descrizione riportata sul pulsante.

Un pulsante Stock ha al suo interno un sistema di packing che allinea da un lato l’immagine e dell’altro il testo relativo; vediamo quindi come investigare i controlli all’interno di un pulsante e una volta rintracciata l’etichetta del testo, cambiare il testo.

Partiremo da una semplicissima finestra realizzata con Glade contenente unicamente un pulsante di nome btnOk con icona Stock.

Pulsante Stock

Prestare particolare attenzione alle proprietà del pulsante appena inserito:

Proprietà di un pulsante StockUna di queste proprietà è chiamata Posizione immagine e determina il posizionamento dell’immagine accanto al testo. Essa può assumere 4 valori: a sinistra, a destra, sopra e sotto il testo.

Questa precisazione va tenuta bene a mente perché il pulsante stesso è un semplice contenitore dentro il quale verrà inserita una Casella orizzontale (GtkHBox) nel caso in cui la posizione dell’immagine sia sinistra o destra, oppure una Casella verticale (GtkVBox) nel caso in cui la posizione sia sopra o sotto.

All’interno della casella di packing verranno inseriti l’immagine e l’etichetta di testo ma il loro ordinamento è esattamente quello visivo: nel caso di immagine a sinistra oppure in alto all’interno della casella il primo elemento sarà l’immagine mentre il secondo l’etichetta.

Nel caso di immagine posta a destra oppure in basso, il primo elemento sarà l’etichetta e quindi l’immagine.

Questa particolarità è fondamentale per poter cambiare il contenuto dell’etichetta di testo, che potrà quindi trovarsi al primo oppure al secondo elemento della casella orizzontale o verticale.

Il codice del progetto potrà essere organizzato così:

import gtk
import gtk.glade
import pygtk
pygtk.require('2.0')

def on_window1_destroy(widget, data=None):
  gtk.main_quit()

segnali = {
  'on_window1_destroy': on_window1_destroy
}

gladeFile = gtk.glade.XML('stock.glade')
window1 = gladeFile.get_widget('window1')

btnOk = gladeFile.get_widget('btnOk')
alignment = btnOk.get_children()[0]
box = alignment.get_children()[0]
label = box.get_children()[1]
label.set_text('Pulsante personalizzato')

gladeFile.signal_autoconnect(segnali)

if window1:
  window1.show()
  gtk.main()

La solita sezione introduttiva per caricare il file Glade e per trovare viene seguita da 5 righe che si occuperanno di fare chiarezza all’interno del pulsante Stock:

btnOk = gladeFile.get_widget('btnOk')
alignment = btnOk.get_children()[0]

La prima di queste ricercherà il pulsante btnOk all’interno della finestra, assegnandolo alla variabile btnOk.

Viene qui presentata per la prima volta la funzione get_children, valida per tutti gli oggetti contenitore e, come abbiamo anticipato, anche il pulsante è un contenitore. La funzione get_children restituirà una lista contenenti tutti gli elementi figli di quel contenitore.

La seconda riga in esame estrarrà il primo (e unico) elemento figlio del pulsante. Si tratterà di un controllo GtkAlignment, un mero contenitore utilizzato per distanziare gli oggetti dal bordo, non interessante nel nostro caso.

box = alignment.get_children()[0]
label = box.get_children()[1]
label.set_text('Pulsante personalizzato')

Essendo il controllo alignment stesso un contenitore è possibile scavare più a fondo per scoprire al suo interno la presenza di un altro contenitore, sempre utilizzando get_children, si arriva alla casella orizzontale o verticale che si trova all’interno del pulsante, qui assegnata alla variabile box.

A questo punto valga il ragionamento fatto in precedenza: se l’immagine si trova a sinistra o in alto sarà il primo elemento della lista, altrimenti il primo sarà l’etichetta di testo.

Nel nostro esempio l’immagine si trovava a sinistra del testo, per cui sarà possibile estrarre l’etichetta dal secondo elemento con:

label = box.get_children()[1]

Nel caso in cui l’immagine si fosse trovata a destra o in basso, il testo sarebbe stato il primo elemento della casella quindi si sarebbe potuto rintracciare con:

label = box.get_children()[0]

Ottenuto il riferimento all’etichetta di testo sarà possibile cambiarne la descrizione semplicemente con:

label.set_text('Pulsante personalizzato')

Il resto del codice non necessita chiarimenti perché già utilizzato molte altre volte. Proviamo quindi subito il programma.

Pulsante Stock con etichetta personalizzata

Il pulsante avrà la sua icona Stock e l’etichetta di testo da noi assegnata.

E’ possibile scaricare sia il progetto Glade che il sorgente Python.

2 Responses to “Cambiare la descrizione di un pulsante Stock”


  1. 1 Mike marzo 2, 2009 alle 7:31 pm

    Just passing by.Btw, you website have great content!

  2. 2 Jibbo marzo 10, 2009 alle 11:34 am

    ciao!!! grazie mille per la dritta, stavo cercando un metodo per fare questa modifica ai pulsanti di stock e non mi veniva in mente nulla!😛

    P.S.
    ho iniziato con il python l’altro ieri,😄
    ho sempre usato java…


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...




Indice degli argomenti


%d blogger cliccano Mi Piace per questo: