domenica 16 dicembre 2012

Facciamo una finestra

OK, adesso che abbiamo visto come si fa con Python siamo pronti per iniziare a provare con gli elementi grafici: finestre, pulsanti, e simili.
Ehi! c'è un problema qui: dobbiamo scegliere quale pacchetto usare, ce ne sono diversi. Propongo di provare wxPython per un paio di ragioni: 1) è quello che uso abitualmente; 2) non solo io, è il più usato; 3) è completo e facile; 4) c'è quasi pronta la versione per il 3.x (sarebbe anche ora!).
Però niente panico! Una volta capito come si fa cambiare è immediato.


OK, ancora qui? Bene, per prima cosa dobbiamo installare wxPython. Basta andare sul sito

http://wxpython.org/

e in download trovate tutte le dritte. Per Ubuntu e Debian (come me) c'è tutto qui

La pagina non sembra molto aggiornata ma funziona.

OK, fatto?

Allora proviamo, una cosa semplicissima, una finestra vuota (f0.py):
#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx

app = wx.App()

frame = wx.Frame(None, -1, 'Prima Prova')
frame.Show()

app.MainLoop()
Semplice vero? Delle prime due righe di codice ormai sappiamo tutto, segue l'istruzione di importazione del package wx, ovvio, lo dobbiamo usare e poi

app = wx.App()

definisce la variabile app, la nostra applicazione, del tipo wx.App. Ogni programma wxPython deve avere un oggetto di tipo applicazione (App).

frame = wx.Frame(None, -1, 'Prima Prova')
frame.Show()

L'oggetto wx.Frame (telaio) è un contenitore all'interno del quale sarà possibile inserire altri oggetti wx. In questo caso non ha genitore/parent (None), l'id (identificatore dell'oggetto) viene lasciato indefinito (-1), sarà definito da wx, e "Prima Prova" è il titolo che comparirà nella barra della finestra.

Una volta definito dobbiamo visualizzarlo con show().

app.MainLoop()
A questo punto abbiamo la nostra applicazione pronta e possiamo eseguire il ciclo infinito di mainloop. Questo ciclo gestirà i metodi usuali (click del mouse, spostamento, ridimensionamento e chusura). È tutto.

L'oggetto Frame è più complesso di quello che abbiamo usato:

wx.Frame(wx.Window parent, int id=-1, string title='', wx.Point pos = wx.DefaultPosition,   wx.Size size = wx.DefaultSize, style = wx.DEFAULT_FRAME_STYLE, string name = "frame")

dove wx.DEFAULT_FRAME_STYLE è uguale a wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.CLIP_CHILDREN.

Proviamo a cambiare qualcosa (f1.py):
#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx

app = wx.App()

win = wx.Frame(None, style = wx.CLOSE_BOX | wx.CAPTION,
               size = (200, 150), pos = (100, 100), 
               title = 'Seconda Prova')
win.Show()

app.MainLoop()
OK? Cos'è cambiato? Qualche pulsante è sparito, la finestra non si può ridimensionare, viene sempre visualizzata in quella posizione e con le dimensioni che vogliamo noi.
Basterebbe riempirla; cosa che vedremo prossimamente.

Per intanto, un regalo di natale in anticipo. Fate un salto a questo URL

è quello che ho usato per questo post.

Juhan.

Ora con la grafica ci sarà veramente da divertirsi...io, però,uso un modulo diverso. Il maestro mi perdonerà. Magari prossimamente vi dirò quale... :)

L'indice di "Mission Python" lo trovate qui

Alla prossima!

9 commenti:

  1. Prima di tutto grazie per questo corso, stò finalmente capendo qualcosina di Python grazie a voi, però avrei una richiesta: si potrebbero aggiungere le versioni in pdf di ogni lezione, in modo da poter conservare sul pc in offline? Sempre se non sono il solo a richiederlo...

    RispondiElimina
    Risposte
    1. Se riesco a trovare il plugin, aggiungo la funzionalità. Grazie a te per il commento. :)

      Elimina
    2. Prova con Print Friendly: http://www.printfriendly.com/
      Ha un paio di difetti: il codice lo riporta in bianco su sfondo bianco e se provi a copiarlo perdi i rientri, fondamentali per Python. Il sistema, secondo me, è File/Salva pagina con nome.

      Elimina
    3. Ancora: trovato questo, più casinato ma migliore: http://css-tricks.com/examples/ThePrintliminator/

      Elimina
    4. Penso che ci siano due soluzioni altrettanto valide per trasformare una pagine web in pdf...ecco:

      http://parliamodi-ubuntu.blogspot.it/2010/10/wkhtmltopdf.html

      http://parliamodi-ubuntu.blogspot.it/2010/12/convertire-pagine-web-in-pdf-con.html

      Elimina
  2. Buongiorno, finalmente posso tornare a leggere il mio corso python preferito :)
    Scusate la lunga assenza ma ero immerso nella RHCSA, finalmente presa :), ed ora torno con la lezione più interessante.
    P.s. la parte grafica lo ammetto non l'ho mai capita XD

    RispondiElimina
  3. // Go
    for {
    fmt.Println("QT")
    }

    RispondiElimina