Bueno la verdad es que corrí el código :p (usas imagenes y otros archivos como main.py, así que no lo pude correr)
Cita:
Iniciado por IamEdo puedo usar un mismo botón para llamar a 2 funciones diferentes en clases diferentes????
Si, si puedes.
Código Python:
Ver originalclass DrawPanel(wx.Panel):
def __init__(self, *args, **kwargs):
#Constructor de DrawPanel
self.pos = (0, 0) #Posición inicial de la imagen en la matriz.
#En el método OnPaint de la clase DrawPanel dibuja la imagen de acuerdo al contenido de la variable self.pos
...
class MyFrame(wx.Frame):
def __init__(self, *args, **kargs):
#Constructor de MyFrame
wx.Frame.__init__(self, *args, **kargs)
#Creamos un Panel dibujable
self.Panel = DrawPanel(self)
... #Esto significa resto del código
def button1Click(self, event):
... #Aqui va el código para ver que botón se presiono
self.Panle.pos = (x, y) #Establecemos la nueva posición, esta posición esta en términos de la matriz.
Espero haber comprendido la idea.
**Edito: Un ejemplo mas complejo.
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
ID_UP = 10
ID_DOWN = 11
ID_LEFT = 12
ID_RIGHT = 13
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)
menuBar = wx.MenuBar()
#Botones
l = ['UP', 'DOWN', 'RIGHT', 'LEFT']
self.buttons = []
for i, j in zip(l, range(10, 13 + 1)):
self.buttons.append(wx.Button(self, j, i))
#El sizer
sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.Panel, 1, wx.EXPAND, 0)
for i in self.buttons:
sizer.Add(i, 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)
for button in self.buttons:
button.Bind(wx.EVT_BUTTON, self.MOVE_IMAGE)
def MOVE_IMAGE(self, event):
id = event.GetId()
n = self.Panel.n
pos = self.Panel.pos
#10 -> UP
#11 -> DOWN
#12 -> RIGHT
#13 -> LEFT
if id == 10 and pos[1] > 0:
pos[1] -= 1
elif id == 11 and pos[1] < n-1:
pos[1] += 1
elif id == 12 and pos[0] < n-1:
pos[0] += 1
elif id == 13 and pos[0] > 0:
pos[0] -= 1
self.Panel.Refresh() #Importante redibuja todo el frame
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
self.pos = [0, 0]
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)
dc.SetPen(wx.Pen("GREEN", 4))
dc.DrawRectangle(self.pos[0] * z, self.pos[1] * z, z, z)
app = wx.PySimpleApp(False)
frame = MyFrame(None, title="Draw on Panel!!!")
frame.SetSizeHints(640, 480)
frame.Show(True)
app.MainLoop()