wenas:
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 originalimport 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