from wxPython.wx import *

class MiaDialog(wxDialog):
    def __init__(self):
        wxDialog.__init__(self, None, -1, "Prova di disegno",
                          size=(400, 200))
        wxInitAllImageHandlers()
        EVT_PAINT(self, self.OnPaint)
        # Carica "immagine.bmp" in memoria.
        self.bmp = wxBitmap("immagine.bmp", wxBITMAP_TYPE_BMP)
        # Viene creata una maschera per l'immagine appena caricata.
        mask = wxMaskColour(self.bmp, "magenta")
        # La maschera viene associata all'immagine.
        self.bmp.SetMask(mask)

    def OnPaint(self, event):
        # Crea il DC e lo prepara per il disegno.
        dc = wxPaintDC(self)
        dc.BeginDrawing()
        # Disegna un rettangolo verde con bordo giallo.
        penna_gialla_spessa = wxPen("yellow", 5, wxSOLID)
        dc.SetPen(penna_gialla_spessa)
        dc.SetBrush(wxGREEN_BRUSH)
        dc.DrawRectangle(5, 5, 100, 100)
        # Disegna una linea molto larga.
        penna_molto_spessa = wxPen(wxColour(180, 27, 93), 18, wxNORMAL)
        dc.SetPen(penna_molto_spessa)
        dc.DrawLine(50, 50, 200, 90)
        # Disegna un'immagine con una maschera trasparente.
        dc.DrawBitmap(self.bmp, 10, 20, 1)
        # Disegna un'immagine senza la maschera trasparente.
        dc.DrawBitmap(self.bmp, 250, 80)
        # Scrive "Hello world" con un carattere grande, in corsivo
        # e grassetto, sottolineato (solo su Windows) e di tipo
        # decorativo.
        font_grande = wxFont(20, wxDECORATIVE, wxITALIC, wxBOLD, 1)
        dc.SetFont(font_grande)
        dc.DrawText("Hello world", 120, 0)
        # Scrive "Hello world" con un carattere piccolo, con
        # larghezza fissa, di colore rosso e sfondo nero.
        font_piccolo = wxFont(10, wxMODERN, wxNORMAL, wxNORMAL)
        dc.SetBackgroundMode(wxSOLID)
        dc.SetTextBackground(wxBLACK)
        dc.SetTextForeground(wxRED)
        dc.SetFont(font_piccolo)
        dc.DrawText("Hello world", 10, 120)
        # Finisce le operazioni di disegno.
        dc.EndDrawing()

class MiaApp(wxApp):
    def OnInit(self):
        dlg = MiaDialog()
        dlg.ShowModal()
        dlg.Destroy()
        return 1

app = MiaApp()
app.MainLoop()