Rotazione di una Label

Rotazione di una LabelSviluppiamo adesso un simpatico esempio per effettuare la rotazione di un testo di una GtkLabel, davvero molto semplice. Due soli pulsanti che aumenteranno e diminuiranno l’angolatura del testo di 10° per volta.

Avviato Glade nel nuovo progetto inserire una finestra e al suo interno una casella verticale di due elementi: in quello superiore una GtkLabel con il solo testo nella proprietà Etichetta, il suo contenuto non è importante.

Nell’elemento inferiore inserire una casella orizzontale di 3 elementi: un pulsante di nome btnIndietro, una label di nome lblAngolo e un altro pulsante di nome btnAvanti. All’interno della Label centrale riporteremo l’angolo di rotazione dopo ogni spostamento per cui assegnargli inizialmente il valore 0, quanto ai due pulsanti scegliere le icone preferite e assegnare al segnale clicked la funzione ruota. Salvare il progetto Glade col nome label-ruota.glade e passare all’editor di Python.

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

gladeFile = gtk.glade.XML('label-ruota.glade')
window1 = gladeFile.get_widget('window1')
lblTesto = gladeFile.get_widget('lblTesto')
lblAngolo = gladeFile.get_widget('lblAngolo')

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

Caricato il file label-ruota.glade, saranno recuperati i controlli lblTesto e lblAngolo e posti nelle rispettive variabili per l’uso successivo. Segue la solita funzione di callback per la chiusura della finestra.

def ruota(widget, data=None):
  angolo = lblTesto.get_angle()
  if widget is gladeFile.get_widget('btnRuotaIndietro'):
    angolo -= 10
  else:
    angolo += 10
  lblTesto.set_angle(angolo)
  lblAngolo.set_text("%s" % lblTesto.get_angle())

La funzione di callback ruota si occupa di ruotare il testo verso sinistra o verso destra, semplicemente modificando l’angolazione corrente del testo. Verrà inizialmente letta l’angolazione attuale col metodo get_angle e posta nella variabile angolo.

Segue un semplice controllo tra il componente che ha scatenato il segnale (il pulsante premuto) e il pulsante btnRuotaIndietro, se questo corrisponde verrà effettuata la rotazione verso sinistra, diminuendo l’angolo, altrimenti l’angolo verrà incrementato di 10°. Questo semplice controllo è più diretto di quello analizzato in precedenza (gtk.glade.get_widget_name) perchè paragona un controllo con un altro anzichè due stringhe.

Il nuovo angolo trovato sarà assegnato alla label col metodo set_angle che lo ruoterà dell’angolo indicato. Immediatamente dopo l’angolo verrà scritto all’interno della label lblAngolo, tuttavia non usando la variabile angolo ma invece rileggendo l’angolo dall’etichetta col metodo get_angle. Ciò consente di conoscere l’angolo preciso del testo, anziché ad esempio un angolo di -10°, l’etichetta restituirà un angolo di 350°.

segnali = {
  'on_window1_destroy': on_window1_destroy,
  'ruota': ruota
}
gladeFile.signal_autoconnect(segnali)

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

Segue l’assegnazione delle routine di callback ai segnali e la visualizzazione della finestra e l’avvio del programma Gtk.

E’ possibile vedere che cliccando sopra i due pulsanti dell’interfaccia il testo sarà immediatamente ruotato, aumentando o diminuendo di 10° per volta. E’ possibile scaricare sia il progetto Glade che il sorgente Python.

3 Risposte to “Rotazione di una Label”


  1. 1 Eugenio gennaio 4, 2009 alle 12:34 am

    Ciao, mi stò anchio avventurando nel mondo di Glade.
    Grazie per i preziosi consigli ed esempi che ci stai dando.
    E’ molto utile per i principianti come me poter vedere degli esemplici semplici ma molto concreti e reali su questo argomento.
    Grazie Buon Lavoro,
    Ciao Eugenio

  2. 2 paki gennaio 25, 2010 alle 8:15 PM

    Bravo continua così!! 🙂

  3. 3 paki gennaio 27, 2010 alle 3:46 PM

    Ciao, avrei una domanda da porre..
    Se volessi ruotare una progress bar invece di una semplice label, sarebbe possibile?


Lascia un commento




Indice degli argomenti