Claro que si con un simple sizer:
Código Python:
Ver original#coding: utf-8
import wx
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, *args, **kargs):
wx.Frame.__init__(self, *args, **kargs)
#Creamos un Panel dibujable y el MenuBar
self.Panel = DrawPanel(self)
self.ButtonExample = wx.Button(self, -1, "Botton Example")
menuBar = wx.MenuBar()
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.Panel, 1, wx.EXPAND, 0)
sizer.Add(self.ButtonExample, 0, 0, 0)
#Añadimos menus
filemenu = wx.Menu()
grillamenu = wx.Menu()
#Añadimos elementos a esos menus
filemenu.Append(wx.ID_EXIT, "&Close", "Close the program")
for i in range(2, 7 + 1):
grillamenu.Append(i, "%dx%d"%(i, i), "Crear grilla %dx%d" % (i, i), wx.ITEM_RADIO)
#Añadimos los menus a la barra de menus
menuBar.Append(filemenu, "&File")
menuBar.Append(grillamenu, "&Grill")
#Por ultimo ajustamos la barra de menu
self.SetMenuBar(menuBar)
#Ajutes del sizer
self.SetSizer(sizer)
self.Layout()
#Linkeamos los eventos a funciones con su respectiva ID
self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
for i in range(2, 7 +1):
self.Bind(wx.EVT_MENU, self.SET_ID, id=i)
def SET_ID(self, event):
#Ajustamos el numero de cuadritos a dibujar
self.Panel.n = event.GetId()
self.Panel.Refresh() #Importante redibuja todo el frame
def OnExit(self, event):
self.Close(True)
class DrawPanel(wx.Panel):
"""Draw a line to a panel."""
def __init__(self, *args, **kwargs):
wx.Panel.__init__(self, *args, **kwargs)
self.Bind(wx.EVT_PAINT, self.OnPaint)
#Por defecto son 2
self.n = 2
def OnPaint(self, event):
dc = wx.PaintDC(self)
#dc.Clear() #Prueba
dc.SetPen(wx.Pen("BLACK", 4))
n = self.n #Acortamos el nombre
z = 30 #Tamaño de los cuadritos
for i in range(n):
for j in range(n):
dc.DrawRectangle(i * z, j * z, z, z)
app = wx.PySimpleApp(False)
frame = MyFrame(None, title="Draw on Panel!!!")
frame.SetSizeHints(640, 480)
frame.Show(True)
app.MainLoop()