dl. Contemporary/Chris Rea/Collection/07 - Fool (If You Think It's Over).mp3 Adult Contemporary/Chris Rea/Collection/11 - Looking For The

  • View
    229

  • Download
    1

Embed Size (px)

Text of dl. Contemporary/Chris Rea/Collection/07 - Fool (If You Think It's Over).mp3 Adult...

  • full circle magazine n. 50 1indice ^

    Full CircleEDIZIONE SPECIALE SERIE PROGRAMMAZIONE

    LA RIVISTA INDIPENDENTE PER LA COMUNIT LINUX UBUNTU

    full circle magazine non affiliata n sostenuta da Canonical Ltd.

    PPRROOGGRRAAMMMMAARREEIINN PPYYTTHHOONNVVOOLLUUMMEE 44

    EDIZIONE SPECIALE

    SERIE PROGRAMMAZIONE

  • Cos' Full Circle

    Full Circle una rivista gratuita e

    indipendente, dedicata alla

    famiglia Ubuntu dei sistemi

    operativi Linux. Ogni mese

    pubblica utili articoli tecnici e

    articoli inviati dai lettori.

    Full Circle ha anche un podcast di

    supporto, il Full Circle Podcast,

    con gli stessi argomenti della

    rivista e altre interessanti notizie.

    Si prega di notare che questaedizione speciale viene fornitasenza alcuna garanzia: n chi hacontribuito n la rivista Full Circlehanno alcuna responsabilit circaperdite di dati o danni chepossano derivare ai computer oalle apparecchiature dei lettoridall'applicazione di quantopubblicato.

    Come contattarci

    Sito web:http://www.fullcirclemagazine.org/

    Forum:http://ubuntuforums.org/forumdisplay.php?f=270

    IRC:#fullcirclemagazine suchat.freenode.net

    Gruppo editoriale

    Capo redattore: Ronnie Tucker(aka: RonnieTucker)ronnie@fullcirclemagazine.org

    Webmaster: Rob Kerfia(aka: admin / linuxgeekery-admin@fullcirclemagazine.org

    Podcaster: Robin Catling(aka RobinCatling)podcast@fullcirclemagazine.org

    Manager delle comunicazioni:Robert Clipsham(aka: mrmonday) -mrmonday@fullcirclemagazine.org

    Ecco a voi un altro Speciale monotematico!

    Come richiesto dai nostri lettori, stiamo assemblando inedizioni dedicate alcuni degli articoli pubblicati in serie.

    Quella che avete davanti la ristampa della serieProgrammare in Python, parti 22-26, pubblicata nei numeri48-52: niente di speciale, giusto quello che abbiamo gipubblicato.

    Vi chiediamo, per, di badare alla data di pubblicazione: leversioni attuali di hardware e software potrebbero esserediverse rispetto ad allora.Controllate il vostro hardware e il vostro software prima diprovare quanto descritto nelle guide di queste edizioni speciali.Potreste avere versioni pi recenti del software installato odisponibile nei repository delle vostre distribuzioni.

    Buon divertimento!

    Gli articoli contenuti in questa rivista sono stati rilasciati sotto la licenza Creative Commons Attribuzione - Non commerciale - Condividi allo stesso modo 3.0.Ci significa che potete adattare, copiare, distribuire e inviare gli articoli ma solo sotto le seguenti condizioni: dovete attribuire il lavoro all'autore originale inuna qualche forma (almeno un nome, un'email o un indirizzo Internet) e a questa rivista col suo nome ("Full Circle Magazine") e con suo indirizzo Internetwww.fullcirclemagazine.org (ma non attribuire il/gli articolo/i in alcun modo che lasci intendere che gli autori e la rivista abbiano esplicitamente autorizzato voi

    o l'uso che fate dell'opera). Se alterate, trasformate o create un'opera su questo lavoro dovete distribuire il lavoro risultante con la stessa licenza o una simile o compatibile.Full Circle magazine completamente indipendente da Canonical, lo sponsor dei progetti di Ubuntu, e i punti di vista e le opinioni espresse nella rivista non sono in alcun modo da

    attribuire o approvati da Canonical.

    Full CircleLA RIVISTA INDIPENDENTE PER LA COMUNIT LINUX UBUNTU

    http://www.fullcirclemagazine.orghttp://ubuntuforums.org/forumdisplay.php?f=270

  • full circle magazine n. 48 7 indice ^

    HHOOWW--TTOOScritto da Greg Walters PPrrooggrraammmmaarree iinn PPyytthhoonn -- PPaarrttee 2222

    Per iniziare col piede giustodovrete avereplaylistmaker.glade eplaylistmaker.py del mese

    scorso. In caso contrario,provvedete di conseguenza. Primadi iniziare, diamo un'occhiata acos' un file playlist. Esistono molteversioni di liste d'esecuzione etutte hanno estensioni differenti.Quella che creeremo noi sar deltipo *.m3u. Nella sua forma pisemplice, solo un file di testo cheinizia con "#EXTM3U" e presentauna riga per ciascuna canzone daascoltare, incluso l'intero percorso.

    possibile aggiungere informazioniulteriori prima di ciascuna vocecome la durata della canzone, iltitolo dell'album, il numero ditraccia e il titolo. Per il momento ciconcentreremo sulla versione base.

    Ecco un esempio di playlist M3U...

    #EXTM3UAdult Contemporary/ChrisRea/Collection/02 - On TheBeach.mp3Adult Contemporary/ChrisRea/Collection/07 - Fool (IfYou Think It's Over).mp3Adult Contemporary/ChrisRea/Collection/11 - LookingFor The Summer.mp3

    Tutti i percorsi sono relativi allaposizione del file playlist.

    Ok... iniziamo a scrivere codice. Adestra trovate l'inizio del codicesorgente del mese scorso.

    Ora dobbiamo creare una funzioneper la gestione di ciascun eventogi configurato. Notate cheon_MainWindow_destroy eon_tbtnQuit_clicked sono gi statirealizzati, cos ne dobbiamorealizzare solamente altri 10

    Errata Corrige

    Il mese scorso, nella parte 21, viera stato detto di salvare il lavorocome "PlaylistMaker.glade" ma,nel codice, vi si facevariferimento come"playlistmaker.glade". Sonosicuro che avrete notato che unaversione ha le maiuscole e l'altrano. Il codice funzioner solousando la stessa versione, con osenza le maiuscole.

    #!/usr/bin/env pythonimport sysfrom mutagen.mp3 import MP3try:

    import pygtkpygtk.require("2.0")

    except:pass

    try:import gtkimport gtk.glade

    except:sys.exit(1)

    quindi la definizione della classeclass PlayListCreator:

    def __init__(self):self.gladefile = "playlistmaker.glade"self.wTree = gtk.glade.XML(self.gladefile,"MainWindow")

    e la routine mainif __name__ == "__main__":

    plc = PlayListCreator()gtk.main()

    Quindi abbiamo il dizionario che dovrebbe essere inserito dopo lafunzione __init__ .def SetEventDictionary(self):dict = {"on_MainWindow_destroy": gtk.main_quit,

    "on_tbtnQuit_clicked": gtk.main_quit,"on_tbtnAdd_clicked": self.on_tbtnAdd_clicked,"on_tbtnDelete_clicked": self.on_tbtnDelete_clicked,"on_tbtnClearAll_clicked": self.on_tbtnClearAll_clicked,"on_tbtnMoveToTop_clicked": self.on_tbtnMoveToTop_clicked,"on_tbtnMoveUp_clicked": self.on_tbtnMoveUp_clicked,"on_tbtnMoveDown_clicked": self.on_tbtnMoveDown_clicked,"on_tbtnMoveToBottom_clicked": self.on_tbtnMoveToBottom_clicked,"on_tbtnAbout_clicked": self.on_tbtnAbout_clicked,"on_btnGetFolder_clicked": self.on_btnGetFolder_clicked,"on_btnSavePlaylist_clicked": self.on_btnSavePlaylist_clicked}

    self.wTree.signal_autoconnect(dict)

  • full circle magazine n. 48 8 indice ^

    (mostrati in alto a destra). Per oracreate solo lo scheletro.

    Le modificheremo tra pochi minuti.Per il momento questo dovrebbeessere sufficiente a eseguirel'applicazione e potremo fare delleprove nel corso dello sviluppo. Maprima di poter eseguirel'applicazione dobbiamo inserireun'ulteriore riga alla funzione__init__. Dopo la riga self.wTree,aggiungete...

    self.SetEventDictionary()

    Ora potete eseguire l'applicazione,osservare la finestra e fare clic sulPulsante Esci della barra strumentiper uscire correttamentedall'applicazione. Salvate il codicecome "playlistmaker-1a.py" eprovate. Ricordate di salvarlo nellastessa cartella insieme al file gladedell'ultima volta o copiate il fileglade nella stessa cartella in cuiavete salvato questo codice.

    Dobbiamo anche definire alcunevariabili per un uso successivo.Inserite le seguenti dopo lachiamata SetEventDictionary nellafunzione __init__.

    self.CurrentPath = ""self.CurrentRow = 0

    self.RowCount = 0

    Ora creeremo una funzione che cipermette di mostrare una finestra acomparsa ogniqualvolta si debbanodare informazioni all'utente. Cisono alcune funzioni predefiniteche useremo, ma creeremo unaroutine nostra per semplificarci illavoro. la funzionegtk.MessageDialog e la sintassi laseguente...

    gtk.MessageDialog(parent,flags,MessageType,Buttons,message)

    Sono necessari alcuni chiarimentiprima di procedere. Il tipo dimessaggio pu essere uno deiseguenti...

    GTK_MESSAGE_INFO - MessaggioinformativoGTK_MESSAGE_WARNING -Messaggio di avviso nonfataleGTK_MESSAGE_QUESTION -Domanda richiedente unasceltaGTK_MESSAGE_ERROR - Messaggiodi errore fatale

    E i tipi di pulsante sono...

    GTK_BUTTONS_NONE - nessunpulsanteGTK_BUTTONS_OK - un pulsanteOK

    GTK_BUTTONS_CLOSE - unpulsante ChiudiGTK_BUTTONS_CANCEL - Unpulsante AnnullaGTK_BUTTONS_YES_NO - pulsantiS e NoGTK_BUTTONS_OK_CANCEL -pulsanti Ok e Annulla

    Normalmente userete il seguente,o simile, codice per creare unafinestra di dialogo, mostrarla,attendere la risposta e quindieliminarla dalla memoria.

    dlg =gtk.MessageDialog(None,0,gtk.MESSAGE_INFO,gtk.BUTTONS_OK,"This is a test message...")response = dlg.run()

    dlg.destroy()

    Comunque, se volete mostrare unmessaggio all'utente pi di una odue volte, si tratta di scrivereparecchio. La regola generale chese scrivete una serie di righe pi diuna o due volte certamentemeglio creare una funzione e quindichiamarla. Ragionate in questomodo: se vogliamo mostrare unmessaggio all'utente, diciamo diecivolte, equivale a scrivere 10x3 (o30) righe di codice. Creando unafunzione (usando l'esempio appenapresentato) avremo 10+3 righe dicodice da scrivere. Pi volterichiamiamo il messaggio, meno

    def on_tbtnAdd_clicked(self,widget):pass

    def on_tbtnDelete_clicked(self,widget):pass

    def on_tbtnClearAll_clicked(self,widget):pass

    def on_tbtnMoveToTop_clicked(self,widget):pass

    def on_tbtnMoveUp_clicked(self,widget):pass

    def on_tbtnMoveDown_clicked(self,widget):pass

    def on_tbtnMoveToBottom_clicked(self,widget):pass

    def on_tbtnAbout_clicked(self,widget):pass

    def on_btnGetFolder_clicked(self,widget):pass

    def on_btnSavePlaylist_clicked(self,widget):pass

    PROGRA