les cuento que llevo algo asi como una semana introduciéndome en python, de a poco le voy agarrando el ritmo al lenguaje en conjunto con wxPython lo cual es totalmente nuevo para mi
ahora el problema que me trae aquí seria el siguiente
tengo que dibujar en pantalla una matriz o grilla pero definiendo su dimencion
se me ocurrio resolverlo con un menu, y a cada evento asignarle una ID que concuerde con la dimencion de la matriz
el problema aparece una vez que se agranda o reduce la ventana y el dibujo desaparece ya que el wx.EVT_PAINT(self, self.dibuja) cuando se ejecuta lo hace con una ID diferente y finalmente no hace lo que debiera hacer
haber si alguien se le ocurre algo, o un metodo distinto
Código Python:
Ver original
import wx ID_ABOUT=101 ID_OPEN=102 ID_BUTTON1=110 ID_RESET=222 ID_UP=111 ID_DOWN=112 ID_LEFT=113 ID_RIGHT=114 ID_START=103 ID_EXIT=999 ID_GRILLA2=2 ID_GRILLA3=3 ID_GRILLA4=4 ID_GRILLA5=5 ID_GRILLA6=6 ID_GRILLA7=7 class MyFrame(wx.Frame): def __init__(self, parent, mytitle, mysize): wx.Frame.__init__(self, parent, wx.ID_ANY, mytitle, size=(800,600)) self.SetBackgroundColour('light grey') self.initialize() def OnAbout(self,e): d= wx.MessageDialog( self, " A sample editor \n" " in wxPython","About Sample Editor", wx.OK) d.ShowModal() d.Destroy() def OnExit(self,e): self.Close(True) def OnOpen(self,e): """ Open a file""" dlg = wx.FileDialog(self, "Choose a file", self.dirname, "", "*.*", wx.OPEN) if dlg.ShowModal() == wx.ID_OK: self.filename=dlg.GetFilename() self.dirname=dlg.GetDirectory() f=open(os.path.join(self.dirname, self.filename),'r') self.control.SetValue(f.read()) f.close() dlg.Destroy() def dibuja(self, event): z = event.GetId() print z if z > 0: dc = wx.PaintDC(self) dc.SetPen(wx.Pen('black', 4)) dc.SetBrush(wx.WHITE_BRUSH) x = 400 if z > 4: hw=80 f=z*hw+400 k=z*hw+50 elif z > 5: hw=60 f=z*hw+400 k=z*hw+50 else: hw=100 f=z*hw+400 k=z*hw+50 while x < f: #maximo de col y = 50 #pos fila while y < k: #max fila dc.DrawRectangle(x, y, hw, hw) y = y+hw x=x+hw wx.EVT_PAINT(self, self.dibuja) # bind the frame to the paint event def initialize(self): grilla = wx.GridBagSizer() self.CreateStatusBar() filemenu= wx.Menu() filemenu1= wx.Menu() filemenu.Append(ID_OPEN, "&Open"," Open a file to edit") filemenu.AppendSeparator() filemenu.Append(ID_ABOUT, "&About"," Information about this program") filemenu.AppendSeparator() filemenu.Append(ID_EXIT,"E&xit"," Terminate the program") filemenu1.Append(ID_GRILLA2, "2x2", "Crear grilla 2x2" ,wx.ITEM_RADIO) filemenu1.Append(ID_GRILLA3, "3x3", "Crear grilla 3x3" ,wx.ITEM_RADIO) filemenu1.Append(ID_GRILLA4, "4x4", "Crear grilla 4x4" ,wx.ITEM_RADIO) filemenu1.Append(ID_GRILLA5, "5x5", "Crear grilla 5x5" ,wx.ITEM_RADIO) filemenu1.Append(ID_GRILLA6, "6x6", "Crear grilla 6x6" ,wx.ITEM_RADIO) filemenu1.Append(ID_GRILLA7, "7x7", "Crear grilla 7x7" ,wx.ITEM_RADIO) # Creating the menubar. menuBar = wx.MenuBar() menuBar.Append(filemenu,"&File") menuBar.Append(filemenu1,"Grilla") self.SetMenuBar(menuBar) . wx.EVT_MENU(self, ID_ABOUT, self.OnAbout) wx.EVT_MENU(self, ID_EXIT, self.OnExit) wx.EVT_MENU(self, ID_OPEN, self.OnOpen) wx.EVT_MENU(self, ID_GRILLA2, self.dibuja) wx.EVT_MENU(self, ID_GRILLA3, self.dibuja) wx.EVT_MENU(self, ID_GRILLA4, self.dibuja) wx.EVT_MENU(self, ID_GRILLA5, self.dibuja) wx.EVT_MENU(self, ID_GRILLA6, self.dibuja) wx.EVT_MENU(self, ID_GRILLA7, self.dibuja) self.SetSizeHints(1024, 720) self.Show(True) app = wx.App() mytitle = "Tests" width = 640 height = 480 MyFrame(None, mytitle, (width, height)).Show() app.MainLoop()
de antemano
gracias