Ver Mensaje Individual
  #7 (permalink)  
Antiguo 18/01/2010, 06:57
IamEdo
 
Fecha de Ingreso: enero-2010
Mensajes: 21
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: problemita con wx.EVT_PAINT

en python hay algo que funcione como un formulario en los dialogs para llevar varios parámetros???
con la idea de setear el tamaño de la matriz pero que sea de NxM
ademas que los botones pueda interactuar con el panel tambien
para que se entienda mejor, aqui va mi codigo

Código Python:
Ver original
  1. import wx
  2. import  cStringIO
  3. from Main import opj
  4.  
  5. ID_GRILLA2 = 2
  6. ID_GRILLA3 = 3
  7. ID_GRILLA4 = 4
  8. ID_GRILLA5 = 5
  9. ID_GRILLA6 = 6
  10. ID_GRILLA7 = 7
  11. ID_UP=111
  12. ID_DOWN=112
  13. ID_LEFT=113
  14. ID_RIGHT=114
  15. ID_START=103
  16. ID_EXIT=999
  17. ID_RESET=222
  18.  
  19. class MyFrame(wx.Frame):
  20.     arreglo = []
  21.     def __init__(self, *args, **kargs):
  22.         wx.Frame.__init__(self, *args, **kargs)
  23.        
  24.         #topsizer = wx.GridSizer(1, 2)
  25.         topsizer = wx.BoxSizer( wx.HORIZONTAL )
  26.        
  27.         #menusizer = wx.GridSizer(4, 1)
  28.         menusizer = wx.BoxSizer( wx.VERTICAL )
  29.        
  30.         asdf = wx.GridBagSizer()
  31.         contentsizer = wx.BoxSizer( wx.VERTICAL )
  32.         self.CreateStatusBar()
  33.        
  34.         #Creamos un Panel dibujable y el MenuBar
  35.         self.Panel = DrawPanel(self)
  36.         menuBar = wx.MenuBar()
  37.        
  38.  
  39.  
  40.  
  41.        
  42.         self.entrada = wx.TextCtrl(self,-1,value=u"",size=(350,-1))
  43.        
  44.         imageFile = "images/arriba.png"
  45.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  46.         arriba = wx.BitmapButton(self, ID_UP, bitmap=image1,size = (image1.GetWidth()+10, image1.GetHeight()+10))
  47.         arriba.Bind(wx.EVT_BUTTON, self.button1Click)
  48.        
  49.         imageFile = "images/atras.png"
  50.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  51.         atras = wx.BitmapButton(self, ID_DOWN, bitmap=image1,size = (image1.GetWidth()+10, image1.GetHeight()+10))
  52.         atras.Bind(wx.EVT_BUTTON, self.button1Click)
  53.        
  54.         imageFile = "images/izquierda.png"
  55.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  56.         izquierda = wx.BitmapButton(self, ID_LEFT, bitmap=image1,size = (image1.GetWidth()+10, image1.GetHeight()+10))
  57.        
  58.         imageFile = "images/derecha.png"
  59.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  60.         derecha = wx.BitmapButton(self, ID_RIGHT, bitmap=image1,size = (image1.GetWidth()+10, image1.GetHeight()+10))
  61.        
  62.         imageFile = "images/start.png"
  63.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  64.         start = wx.BitmapButton(self, ID_START, bitmap=image1,size = (image1.GetWidth()+10, image1.GetHeight()+10))
  65.        
  66.         imageFile = "images/exit.png"
  67.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  68.         reset = wx.BitmapButton(self, ID_RESET, bitmap=image1,size = (image1.GetWidth()-3, image1.GetHeight()-3))
  69.        
  70.         arriba.Bind(wx.EVT_BUTTON, self.button1Click)
  71.         atras.Bind(wx.EVT_BUTTON, self.button1Click)
  72.         derecha.Bind(wx.EVT_BUTTON, self.button1Click)
  73.         izquierda.Bind(wx.EVT_BUTTON, self.button1Click)
  74.         reset.Bind(wx.EVT_BUTTON, self.OnReplace)
  75.        
  76.        
  77.         contentsizer.Add(self.Panel,1,wx.EXPAND)
  78.         asdf.Add(self.entrada, (0,0),(1,10))
  79.         asdf.Add(arriba, (3,2))
  80.         asdf.Add(atras, (5,2))
  81.         asdf.Add(derecha, (4,3))
  82.         asdf.Add(izquierda, (4,1))
  83.         asdf.Add(start, (7,1))
  84.         asdf.Add(reset, (7,3))
  85.         menusizer.Add(asdf, 0)
  86.        
  87.         topsizer.Add(menusizer, 0)
  88.         topsizer.Add(contentsizer, 1, wx.EXPAND)
  89.        
  90.         self.SetSizer(topsizer)
  91.        
  92.        
  93.      
  94.        
  95.         #Aniadimos menus
  96.         filemenu = wx.Menu()
  97.         grillamenu = wx.Menu()
  98.  
  99.         #Aniadimos elementos a esos menus
  100.         filemenu.Append(wx.ID_EXIT, "&Close", "Close the program")
  101.         for i in range(2, 7 + 1):
  102.             grillamenu.Append(i, "%dx%d"%(i, i), "Crear grilla %dx%d" % (i, i), wx.ITEM_RADIO)
  103.  
  104.         #Aniadimos los menus a la barra de menus
  105.         menuBar.Append(filemenu, "&File")
  106.         menuBar.Append(grillamenu, "&Grill")
  107.  
  108.         #Por ultimo ajustamos la barra de menu
  109.         self.SetMenuBar(menuBar)
  110.        
  111.  
  112.         #Linkeamos los eventos a funciones con su respectiva ID
  113.         self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
  114.         for i in range(2, 7 +1):
  115.             self.Bind(wx.EVT_MENU, self.SET_ID, id=i)
  116.        
  117.        
  118.     def button1Click(self,event):
  119.         if event.GetId() == 111:
  120.             buff = "/\ "
  121.             buffT = "adelante"
  122.         if event.GetId() == 113:
  123.             buff = "< "
  124.             buffT = "izquierda"
  125.         if event.GetId() == 114:
  126.             buff = "> "
  127.             buffT = "derecha"
  128.         if event.GetId() == 112:
  129.             buff = "\/ "
  130.             buffT = "atras"
  131.         self.arreglo.append(buffT)
  132.         print self.arreglo
  133.         self.entrada.WriteText(buff+",")    
  134.        
  135.     def OnReplace(self, evt):
  136.         #self.tc.Replace(5, 9, "IS A")
  137.         self.entrada.Remove(0,100)
  138.         self.arreglo = []
  139.    
  140.  
  141.     def SET_ID(self, event):
  142.         #Ajustamos el numero de cuadritos a dibujar
  143.         self.Panel.n = event.GetId()
  144.         self.Panel.Refresh() #Importante redibuja todo el frame
  145.    
  146.     def OnExit(self, event):
  147.         self.Close(True)
  148.        
  149.    
  150.  
  151. class DrawPanel(wx.Panel):
  152.     """Draw a line to a panel."""
  153.     def __init__(self, *args, **kwargs):
  154.         wx.Panel.__init__(self, *args, **kwargs)
  155.         self.Bind(wx.EVT_PAINT, self.OnPaint)
  156.  
  157.         #Por defecto son 2
  158.         self.n = 2
  159.        
  160.         data = open(opj('images/robot.jpg'), "rb").read()
  161.         stream = cStringIO.StringIO(data)
  162.    
  163.         bmp = wx.BitmapFromImage( wx.ImageFromStream( stream ))
  164.         ver=320 #centro caja 1 2x2
  165.         hor=460
  166.         wx.StaticBitmap(self, -1, bmp, (ver, hor))#, (bmp.GetWidth(), bmp.GetHeight()))}
  167.  
  168.     def OnPaint(self, event):
  169.        
  170.         dc = wx.PaintDC(self)
  171.        
  172.         #dc.Clear() #Prueba
  173.         dc.SetPen(wx.Pen("BLACK", 4))
  174.         n = self.n #Acortamos el nombre
  175.         #
  176.         x=200 #pos inicial de la col 1
  177.         y=50  #pos inicial de la fila 1
  178.         z=560/n
  179.         for i in range(n):
  180.             for j in range(n):
  181.                 dc.DrawRectangle(i * z+x, j * z+y, z, z)
  182.                
  183.        
  184.  
  185. app = wx.PySimpleApp(False)
  186. frame = MyFrame(None, title="Simulador!!!")
  187. frame.SetSizeHints(1280, 720)
  188. frame.Show(True)
  189. app.MainLoop()

la idea es mover la imagen por la matriz deacuerdo a los botones, pero no pillo como pasar los parametros de los botones al panel para mover la imagen

Última edición por IamEdo; 18/01/2010 a las 07:59