Un primo pulsante

Uno tra i più semplici componenti è il pulsante della classe GtkButton. Si tratta del classico pulsante da premere, con un’icona o una descrizione opzionale sopra. Naturalmente l’azione più semplice sopra un GtkButton è il click col tasto sinistro, vediamone subito il funzionamento.

Torniamo sul progetto Glade, con la finestra vuota e dalla tavolozza degli strumenti, sotto il gruppo Controllo e visualizzazione sceglieremo il Pulsante (la prima tra le icone). Un click prima sul controllo dalla tavolozza e poi un altro all’interno della finestra creata in precedenza piazzerà il pulsante all’interno della finestra, facendogli assumere l’intera area disponibile.

Inutile intestardirsi a ridurlo, spostarlo per posizionarlo meglio, il comportamento non è analogo a quello di altri strumenti di sviluppo. Nella GTK vige la regola dell’impacchettamento (Packing), vedremo più avanti il funzionamento, per adesso lasciamo stare il pulsante dove si trova.

Un click sopra lo renderà l’oggetto attivo su Glade e la finestra delle proprietà mostrerà le possibilità per quel pulsante scelto. Prendiamo da subito una buona abitudine: diamo un nome coerente al pulsante, ad esempio btnChiudi; ciò renderà più semplice l’uso e la comprensione del codice.

Il nome di ogni controllo andrà specificato nella casella Nome (ovviamente!) e deve essere univoco in tutto il progetto Glade. Ciò significa che non potranno esserci due pulsanti con lo stesso nome, neanche se contenuti in due finestre differenti. Questo nome verrà poi utilizzato nel codice Python per ottenere un riferimento all’oggetto e gestirne i segnali e le proprietà.

Subito sotto il nome si trova una casella a scelta che presenta tre possibilità:

  • Etichetta consente di specificare un testo sopra la superficie del pulsante
  • Stock consente di mostrare un’icona del tema grafico sopra il pulsante
  • Contenitore renderà il pulsante un contenitore per un altro componente

Lasciando Etichetta sarà possibile scrivere un testo qualsiasi all’interno della casella omonima. In questo esempio presenterà il testo Chiudi la finestra. Il pulsante infatti servirà per chiudere la finestra aperta. Tralasciamo le altre proprietà al momento non necessarie e spostiamoci sulla scheda Segnali che ci è stata presentata la volta precedente.

Tralasciando il segnale activate quelli mostrati sono i principali di un controllo GtkButton:

  • clicked scatta nel momento in cui viene premuto e rilasciato il pulsante, il classico click
  • enter identifica il momento in cui il mouse passa sopra il pulsante
  • leave indica l’opposto, quando il mouse esce dalla superficie del pulsante
  • pressed identifica la pressione del pulsante del mouse sopra il controllo GtkButton, se il rilascio sarà sopra lo stesso pulsante, si verificherà di un click semplice
  • released indica il rilascio del pulsante del mouse sopra il pulsante si raccomanda l’uso di clicked. Vedremo più avanti l’uso degli altri segnali.

Per questo esempio specificheremo la callback on_btnChiudi_clicked per il segnale clicked, salviamo il progetto Glade e passiamo al codice Python.

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

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

def on_btnChiudi_clicked(widget, data=None):
  window1.destroy()

segnali = {
  'on_window1_destroy': on_window1_destroy,
  'on_btnChiudi_clicked': on_btnChiudi_clicked
}

gladeFile = gtk.glade.XML('hello.glade')
window1 = gladeFile.get_widget('window1')
gladeFile.signal_autoconnect(segnali)

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

Rispetto l’esempio precedente è stata aggiunta la funzione on_btnChiudi_clicked che eseguirà il metodo destroy della finestra windows1 e la chiude. La funzione è aggiunta quindi al dizionario segnali che, mediante il metodo signal_autoconnect verrà collegato al file Glade e ne gestirà i segnali.

Avviando il programma sarà mostrata una finestra ed un unico pulsante grande quanto tutta la superficie della finestra. Allargando o riducendo quest’ultima varierà anche la dimensione del pulsante in modo che occupi sempre l’intera finestra.

Cliccando sul pulsante verrà chiusa la finestra e quindi anche il programma. Infatti il click sul pulsante causerà lo scattare del segnale clicked e il richiamo della funzione on_btnChiudi_clicked che distruggerà la finestra window1. Poiché è presente anche il codice per il segnale destroy della finestra, alla pressione del pulsante btnChiudi seguirà la chiusura del programma.

E’ possibile scaricare il progetto Python e l’interfaccia Glade.

8 Responses to “Un primo pulsante”


  1. 1 crash dicembre 11, 2008 alle 12:18 pm

    a me dice che NameError: global name ‘window1_destroy’ is not defined
    ma è praticamente indetico al tuo programma tranne quello postato in rete che ha attiva anche leave e non solo clicked?

  2. 2 piranha001 dicembre 11, 2008 alle 12:32 pm

    Traceback (most recent call last):
    File “/home/crash/Scrivania/python/hello.py”, line 11, in on_btnchiudi_clicked
    window1_destroy
    NameError: global name ‘window1_destroy’ is not defined
    questo e l’errore che mi da e pure e indetico al tuo

  3. 3 Muflone dicembre 11, 2008 alle 7:04 pm

    se ti dice window1_destroy e` perche` hai scritto quello.
    invece devi scrivere window1.destroy() come dice l’esempio

    ciao

  4. 4 piranha001 dicembre 12, 2008 alle 12:42 pm

    Traceback (most recent call last):
    File “/home/crash/Scrivania/python/hello.py”, line 11, in on_btnchiudi_clicked
    window1_destroy()
    NameError: global name ‘window1_destroy’ is not defined

    E’ la stessa identica cosa

  5. 5 Muflone dicembre 12, 2008 alle 6:29 pm

    prova a scaricare il progetto di esempio e vedi se ti funziona quello

  6. 6 piranha001 dicembre 13, 2008 alle 7:48 am

    si quello funziona perfettamente, ma non riesco a capire quale sia la differenza perchè non cè ne, tranne che nel tuo progetto online da glade è attivo anche il segnale leave, che però se attivo sul mio mi da lo stesso identico errore

  7. 7 Muflone dicembre 13, 2008 alle 12:49 pm

    fai uno zip del progetto python e del file glade e inviamelo a w!e!b!r!e!g@vb!sim!ple.net (togli i ! dall’indirizzo)
    ciao

  8. 8 Muflone dicembre 23, 2008 alle 7:54 pm

    ti ho appena risposto all’email
    ciao


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: