Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/01/2010, 17:47
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: problemita con wx.EVT_PAINT

Primero que nada, Bienvenido!!!

Ahora pasamos a la parte del código
Código Python:
Ver original
  1. import wx
  2.  
  3. ID_GRILLA2 = 2
  4. ID_GRILLA3 = 3
  5. ID_GRILLA4 = 4
  6. ID_GRILLA5 = 5
  7. ID_GRILLA6 = 6
  8. ID_GRILLA7 = 7
  9.  
  10. class MyFrame(wx.Frame):
  11.     def __init__(self, *args, **kargs):
  12.         wx.Frame.__init__(self, *args, **kargs)
  13.  
  14.         #Creamos un Panel dibujable y el MenuBar
  15.         self.Panel = DrawPanel(self)
  16.         menuBar = wx.MenuBar()
  17.  
  18.         #Añadimos menus
  19.         filemenu = wx.Menu()
  20.         grillamenu = wx.Menu()
  21.  
  22.         #Añadimos elementos a esos menus
  23.         filemenu.Append(wx.ID_EXIT, "&Close", "Close the program")
  24.         for i in range(2, 7 + 1):
  25.             grillamenu.Append(i, "%dx%d"%(i, i), "Crear grilla %dx%d" % (i, i), wx.ITEM_RADIO)
  26.  
  27.         #Añadimos los menus a la barra de menus
  28.         menuBar.Append(filemenu, "&File")
  29.         menuBar.Append(grillamenu, "&Grill")
  30.  
  31.         #Por ultimo ajustamos la barra de menu
  32.         self.SetMenuBar(menuBar)
  33.  
  34.         #Linkeamos los eventos a funciones con su respectiva ID
  35.         self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
  36.         for i in range(2, 7 +1):
  37.             self.Bind(wx.EVT_MENU, self.SET_ID, id=i)
  38.  
  39.     def SET_ID(self, event):
  40.         #Ajustamos el numero de cuadritos a dibujar
  41.         self.Panel.n = event.GetId()
  42.         self.Panel.Refresh() #Importante redibuja todo el frame
  43.    
  44.     def OnExit(self, event):
  45.         self.Close(True)
  46.  
  47. class DrawPanel(wx.Panel):
  48.     """Draw a line to a panel."""
  49.     def __init__(self, *args, **kwargs):
  50.         wx.Panel.__init__(self, *args, **kwargs)
  51.         self.Bind(wx.EVT_PAINT, self.OnPaint)
  52.         #Por defecto son 2
  53.         self.n = 2
  54.  
  55.     def OnPaint(self, event):
  56.         dc = wx.PaintDC(self)
  57.         #dc.Clear() #Prueba
  58.         dc.SetPen(wx.Pen("BLACK", 4))
  59.         n = self.n #Acortamos el nombre
  60.         z = 30 #Tamaño de los cuadritos
  61.         for i in range(n):
  62.             for j in range(n):
  63.                 dc.DrawRectangle(i * z, j * z, z, z)
  64.  
  65. app = wx.PySimpleApp(False)
  66. frame = MyFrame(None, title="Draw on Panel!!!")
  67. frame.SetSizeHints(640, 480)
  68. frame.Show(True)
  69. app.MainLoop()

No dudes en preguntar de nuevo si algo no esta claro.