from wxPython.wx import * import random class MiaDialog(wxDialog): def __init__(self): wxDialog.__init__(self, None, -1, "Prova di disegno con wxMemoryDC", size=(350, 250)) # E` possibile scegliere se usare un wxMemoryDC o no. self.radio_box =wxRadioBox(self, -1, "Usare un wxMemoryDC?", (10, 160), (150, 40), choices=["No", "Sì"]) # Il pulsante permette di ridisegnare la finestra. BTN_ID = wxNewId() btn = wxButton(self, BTN_ID, "Ridisegna", (170, 160), (-1, 40)) EVT_BUTTON(self, BTN_ID, self.OnButtonDown) def OnButtonDown(self, event): # Il pulsante è stato premuto, ridisegna la # finestra, se è selezionato "No" viene ritornato 0 # da GetSelection perché "No" è il primo controllo, # altrimenti viene ritornato "1" perché il radiobutton # "Sì" è il secondo pulsante del radiobox. (?) usa_memory_dc = self.radio_box.GetSelection() self.Ridisegna(usa_memory_dc) def Ridisegna(self, usa_memory_dc): # Crea un wxClientDC ed inizia le operazioni di disegno. client_dc = wxClientDC(self) client_dc.BeginDrawing() # Larghezza ed altezza del rettangolo in cui avvengono le # operazioni di disegno. larghezza = 300 altezza = 150 # Le operazioni di disegno avvengono su dest_dc che si # riferisce a diversi wxDC in base a usa_memory_dc if usa_memory_dc: # Se usa_memory_dc è 1 allora dest_dc è un wxMemoryDC. dest_dc = wxMemoryDC() # Viene creata una bitmap che viene poi selezionata # nel wxMemoryDC. bmp = wxEmptyBitmap(larghezza, altezza) dest_dc.SelectObject(bmp) dest_dc.BeginDrawing() else: # Se usa_memory_dc è 0 allora viene usato client_dc. dest_dc = client_dc # Lista dei possibili colori fra cui scegliere per # disegnare i cerchi. lista_colori = ("BLUE", "BLUE VIOLET", "BROWN", "CYAN", "DARK GREY", "DARK GREEN", "GOLD", "GREY", "GREEN", "MAGENTA", "NAVY", "PINK", "RED", "SKY BLUE", "VIOLET", "YELLOW", "PALE GREEN") # Disegna 1000 cerchi di colore, dimensione e posizione casuale for i in range(1000): # Il colore è estratto fra la lista dei possibili colori, # random.randrange(min, max) ritorna un numero casuale # compreso fra min e max. n_colore = random.randrange(0, len(lista_colori)) colore = lista_colori[n_colore] # Vengono creati e selezionati nel wxDC i pennelli e le penne # di colore casuale. penna = wxPen(colore, 1, wxSOLID) dest_dc.SetPen(penna) pennello = wxBrush(colore, wxSOLID) dest_dc.SetBrush(pennello) # Diametro del cerchio. dim = random.randrange(5, 30) # Posizione in cui disegnare il cerchio, viene usato # "- dim" perxhé altrimenti le operazioni di disegno # potrebbero avvenire fuori dal rettangolo scelto. pos_x = random.randrange(0, larghezza - dim) pos_y = random.randrange(0, altezza - dim) # Disegna il cerchio. dest_dc.DrawEllipse(pos_x, pos_y, dim, dim) if usa_memory_dc: # I 500 cerchi sono stati disegnati sul wxMemporyDC, # adesso devono essere ricopiati su client_dc. client_dc.Blit(0, 0, larghezza, altezza, dest_dc, 0, 0) dest_dc.EndDrawing() client_dc.EndDrawing() class MiaApp(wxApp): def OnInit(self): dlg = MiaDialog() dlg.ShowModal() dlg.Destroy() return 1 app = MiaApp() app.MainLoop()