giovedì 20 dicembre 2012

Ancora finestre

Salve!

Ebbene sì! Continuiamo a fare finestre.

Eccone una nuova (f2.py):


#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx

class Example(wx.Frame):
  
    def __init__(self, parent, title):
        super(Example, self).__init__(parent, title = title, 
            size = (250, 200))
        self.Centre()           
        self.Show()

if __name__ == '__main__':
    app = wx.App()
    Example(None, title='Centrata sullo schermo')
    app.MainLoop()
È quasi come quella della volta scorsa, è solo centrata sullo schermo.
O no?
Sì, i più bravi avranno notato una differenza fondamentale: abbiamo definito una classe con class Example(wx.Frame). Questo vuol dire che istanziamo Example dalla classe Frame di wx. Di Example definiamo il costruttore __init__. Abbiamo diverse possibilità, per esempio le dimensioni e la posizione possiamo definirle anche così (f3.py):
#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx

class Example(wx.Frame):
  
    def __init__(self, parent, title):
        super(Example, self).__init__(parent, title = title) 
        self.Size = (250, 200)
        self.SetPosition(wx.Point(200, 100))            
        self.Show()

if __name__ == '__main__':
    app = wx.App()
    Example(None, title='Posizione')
    app.MainLoop()
Oppure, così (f4.py)
#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx

class Example(wx.Frame):
  
    def __init__(self, parent, title):
        super(Example, self).__init__(parent, title = title) 
        self.Size = (250, 200)
        self.Move((200, 100))           
        self.Show()

if __name__ == '__main__':
    app = wx.App()
    Example(None, title='Posizione com Move()')
    app.MainLoop()
Ancora una cosa nuova: Move vuole un wx.Point, esattamente come SetPosition dell'esempio precedente. Ma se mettete una coppia di parentesi aggiuntiva questa viene vista come una tupla (ricordate le tuple vero?) esattamente come un wx.Point. Tutti questi trucchetti all'inizio possono spaventare ma poi vedrete che diventano abituali. Un'altra cosa ancora: la condizione if __name__ == '__main__' è in qualche misura ridondante, messa per sicurezza qualora lo script venisse importato (sapete che i pasticcioni sono creativi). Ecco un esempio "non sicuro" ma funzionante (f5.py):
#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx

class Example(wx.Frame):
  
    def __init__(self, parent, title):
        super(Example, self).__init__(parent, title = title) 
        self.Size = (250, 200)
        self.Move((200, 100))           
        self.Show()

#main
app = wx.App()
Example(None, title='***')
app.MainLoop()
La gerarchia di wx è piuttosto complessa. E per di più io conosco solo il link che fa riferimento al C++, qui

provate a vedere p.es. wxFrame, terribile vero? Ma per quel che ci serve la useremo in dosi minime, omeopatiche.
E la prossima puntata metteremo qualcosa in queste finestre vuote, promesso.

Juhan

L'indice di "Mission Python" lo trovate qui.

Nessun commento:

Posta un commento