Foros del Web » Programando para Internet » Python »

Problema con combobox

Estas en el tema de Problema con combobox en el foro de Python en Foros del Web. hola a todos, primero que todo soy un poco nuevo en python asi que no se a que nivel me estoy equivocando, bueno lo que ...
  #1 (permalink)  
Antiguo 19/07/2010, 10:03
 
Fecha de Ingreso: enero-2010
Mensajes: 21
Antigüedad: 14 años, 10 meses
Puntos: 0
Problema con combobox

hola a todos, primero que todo soy un poco nuevo en python asi que no se a que nivel me estoy equivocando, bueno lo que pasa es que estoy escribiendo un script que me muestre un set de imagenes por cada valor del combobox, ponerlos en una grilla
el problema pasa despues de llegar a la funcion del combobox no logro hacer que las imagenes cambien
aqui el codigo

en este ejemplo trato de modificar de a 1 sola imagen pero logrando eso, la logica tendria que ser la misma para cambiar el set completo de imagenes
alguna idea???

Código Python:
Ver original
  1. import wx
  2. class MyFrame(wx.Frame):
  3.    
  4.     cmbox=1
  5.     def __init__(self, *args, **kargs):
  6.         wx.Frame.__init__(self, *args, **kargs)
  7.        
  8.         topsizer = wx.BoxSizer( wx.HORIZONTAL )
  9.         menusizer = wx.BoxSizer( wx.VERTICAL )
  10.         contentsizer = wx.BoxSizer( wx.VERTICAL )
  11.        
  12.         self.asdf = wx.GridBagSizer()
  13.  
  14.    
  15.         self.CreateStatusBar()
  16.        
  17.         imageFile = "images/%d.jpeg"%(self.cmbox)
  18.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  19.         n1 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  20.         imageFile = "images/2.jpeg"
  21.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  22.         n2 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  23.         imageFile = "images/3.jpeg"
  24.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  25.         n3 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  26.         imageFile = "images/4.jpeg"
  27.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  28.         n4 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  29.         imageFile = "images/5.jpeg"
  30.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  31.         n5 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  32.         imageFile = "images/6.jpeg"
  33.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  34.         n6 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  35.         imageFile = "images/7.jpeg"
  36.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  37.         n7 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  38.         imageFile = "images/8.jpeg"
  39.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  40.         n8 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  41.         imageFile = "images/9.jpeg"
  42.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  43.         n9 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  44.        
  45.         sampleList = ['uno', 'dos', 'tres', 'cuatro']
  46.  
  47.         combo1 = wx.ComboBox(self, 500, "elementos", (90, 80),
  48.                          (350, -1), sampleList,
  49.                          wx.CB_DROPDOWN
  50.                          )
  51.  
  52.         self.Bind(wx.EVT_COMBOBOX, self.EvtComboBox, combo1)
  53.        
  54.         self.asdf.Add(n1, (13, 1))
  55.         self.asdf.Add(n2, (13, 2))
  56.         self.asdf.Add(n3, (13, 3))
  57.         self.asdf.Add(n4, (14, 1))
  58.         self.asdf.Add(n5, (14, 2))
  59.         self.asdf.Add(n6, (14, 3))
  60.         self.asdf.Add(n7, (15, 1))
  61.         self.asdf.Add(n8, (15, 2))
  62.         self.asdf.Add(n9, (15, 3))
  63.        
  64.  
  65.         menusizer.Add(self.asdf, 0)
  66.         topsizer.Add(menusizer, 0)
  67.         self.SetSizer(topsizer)
  68.        
  69.     def EvtComboBox(self, evt):
  70.         print "estoy en el evento"
  71.         if evt.GetString() == 'uno':
  72.             self.cmbox = 1;
  73.             print self.cmbox
  74.         if evt.GetString() == 'dos':
  75.             self.cmbox = 2;
  76.             print self.cmbox
  77.         if evt.GetString() == 'tres':
  78.             self.cmbox = 3;
  79.             print self.cmbox
  80.         if evt.GetString() == 'cuatro':
  81.             self.cmbox = 4;
  82.             print self.cmbox
  83. app = wx.App()
  84. frame = MyFrame(None, title="asdf")
  85. frame.Show(True)
  86. app.MainLoop()
  #2 (permalink)  
Antiguo 21/07/2010, 15:38
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Problema con combobox

Tienes que usar un StaticBitmap en vez de un BitmapButton

Aqui hay un ejemplo no me funciono a mi pero con unos cuantos cambios lo hice jalar.
Código Python:
Ver original
  1. import wx, os
  2.  
  3. class TestFrame(wx.Frame):
  4.     def __init__(self, *args, **kwargs):
  5.  
  6.         wx.Frame.__init__(self, *args, **kwargs)
  7.         # there needs to be an "Images" directory with one or more jpegs in it in the
  8.         # current working directory for this to work
  9.         self.jpgs = GetJpgList("image") # get all the jpegs in the Images directory
  10.         self.CurrentJpg = 0
  11.  
  12.         self.MaxSize = (200, 400)
  13.  
  14.         b = wx.Button(self, label= "Display next")
  15.         self.Bind(wx.EVT_BUTTON, self.DisplayNext)
  16.         # starting with an EmptyBitmap, the real one will get put there
  17.         # by the call to .DisplayNext()
  18.         self.Image = wx.StaticBitmap(self, bitmap=wx.EmptyBitmap(*self.MaxSize))
  19.         self.DisplayNext()
  20.  
  21.         # Using a Sizer to handle the layout: I never like to use absolute postioning
  22.         box = wx.BoxSizer(wx.VERTICAL)
  23.         box.Add(b, 0, wx.CENTER|wx.ALL, 10)
  24.  
  25.         # adding stretchable space before and after centers the image.
  26.         box.Add((1,1),1)
  27.         box.Add(self.Image, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL|wx.ADJUST_MINSIZE, 10)
  28.         box.Add((1,1),1)
  29.  
  30.         #self.SetSizerAndFit(box)
  31.  
  32.         wx.EVT_CLOSE(self, self.OnCloseWindow)
  33.  
  34.     def DisplayNext(self, event=None):
  35.         # load the image
  36.         Img = wx.Image(self.jpgs[self.CurrentJpg], wx.BITMAP_TYPE_JPEG)
  37.  
  38.         # scale the image, preserving the aspect ratio
  39.         W = Img.GetWidth()
  40.         H = Img.GetHeight()
  41.         if W > H:
  42.             NewW = self.MaxSize[0]
  43.             NewH = self.MaxSize[0] * H / W
  44.         else:
  45.             NewH = self.MaxSize[0]
  46.             NewW = self.MaxSize[0] * W / H
  47.         Img = Img.Scale(NewW,NewH)
  48.  
  49.         # convert it to a wx.Bitmap, and put it on the wx.StaticBitmap
  50.         self.Image.SetBitmap(wx.BitmapFromImage(Img))
  51.  
  52.         # You can fit the frame to the image, if you want.
  53.         self.Fit()
  54.  
  55.         self.CurrentJpg += 1
  56.         if self.CurrentJpg > len(self.jpgs) -1:
  57.             self.CurrentJpg = 0
  58.  
  59.     def OnCloseWindow(self, event):
  60.         self.Destroy()
  61.  
  62.  
  63. def GetJpgList(dir):
  64.     jpgs = [f for f in os.listdir(dir) if f[-4:] == ".jpg"]
  65.     print "JPGS are:", jpgs
  66.  
  67.     return [os.path.join(dir, f) for f in jpgs]
  68.  
  69. class App(wx.App):
  70.     def OnInit(self):
  71.         frame = TestFrame(None, title="wxBitmap Test")
  72.         frame.Show(True)
  73.         return True
  74.  
  75. if __name__ == "__main__":
  76.     app = App(redirect=False)
  77.     app.MainLoop()
  #3 (permalink)  
Antiguo 21/07/2010, 16:06
 
Fecha de Ingreso: enero-2010
Mensajes: 21
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Problema con combobox

me acabo de dar cuenta de que me exprese mal
y no utilice el mejor codigo de ejemplo xD
entodo caso el "GetJpgList" me va a ser super util


ahora me explico un poco mejor (creo) la idea es que cuando se seleccione una opcion del combobox, la funcion asociada a este me agrege a la grilla los botones, y vallan cambiando cuando se cambie el valor del combobox
la idea es que el set de botones no aparesca si no se llaman con el combobox
espero se entendiera mejor ahora :P
  #4 (permalink)  
Antiguo 26/07/2010, 14:42
 
Fecha de Ingreso: enero-2010
Mensajes: 21
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Problema con combobox

talvez asi se entienda mejor
la idea es poder cambiar las imagenes de los botones, pero solo logro mostrar las imagenes sueltas y no acomodadas en la grilla

Código Python:
Ver original
  1. import wx
  2. class MyFrame(wx.Frame):
  3.    
  4.     cmbox=1
  5.     def __init__(self, *args, **kargs):
  6.         wx.Frame.__init__(self, *args, **kargs)
  7.        
  8.         topsizer = wx.BoxSizer( wx.HORIZONTAL )
  9.         menusizer = wx.BoxSizer( wx.VERTICAL )
  10.         contentsizer = wx.BoxSizer( wx.VERTICAL )
  11.        
  12.         self.asdf = wx.GridBagSizer()
  13.  
  14.        
  15.         self.picture = wx.StaticBitmap(self)
  16.        
  17.         imageFile = "images/%d.jpeg"%(self.cmbox)
  18.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  19.         n1 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  20.         imageFile = "images/2.jpeg"
  21.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  22.         n2 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  23.         imageFile = "images/3.jpeg"
  24.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  25.         n3 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  26.         imageFile = "images/4.jpeg"
  27.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  28.         n4 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  29.         imageFile = "images/5.jpeg"
  30.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  31.         n5 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  32.         imageFile = "images/6.jpeg"
  33.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  34.         n6 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  35.         imageFile = "images/7.jpeg"
  36.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  37.         n7 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  38.         imageFile = "images/8.jpeg"
  39.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  40.         n8 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  41.         imageFile = "images/9.jpeg"
  42.         image1 = wx.Image(imageFile, wx.BITMAP_TYPE_ANY).ConvertToBitmap()
  43.         n9 = wx.BitmapButton(self, -1, bitmap=image1,size = (image1.GetWidth()-30, image1.GetHeight()-30))
  44.        
  45.         sampleList = ['uno', 'dos', 'tres', 'cuatro']
  46.  
  47.         combo1 = wx.ComboBox(self, 500, "elementos", (90, 80),
  48.                          (350, -1), sampleList,
  49.                          wx.CB_DROPDOWN
  50.                          )
  51.  
  52.         self.Bind(wx.EVT_COMBOBOX, self.EvtComboBox, combo1)
  53.        
  54.         self.asdf.Add(n1, (13, 1))
  55.         self.asdf.Add(n2, (13, 2))
  56.         self.asdf.Add(n3, (13, 3))
  57.         self.asdf.Add(n4, (14, 1))
  58.         self.asdf.Add(n5, (14, 2))
  59.         self.asdf.Add(n6, (14, 3))
  60.         self.asdf.Add(n7, (15, 1))
  61.         self.asdf.Add(n8, (15, 2))
  62.         self.asdf.Add(n9, (15, 3))
  63.        
  64.  
  65.         menusizer.Add(self.asdf, 0)
  66.         topsizer.Add(menusizer, 0)
  67.         self.SetSizer(topsizer)
  68.        
  69.     def EvtComboBox(self, evt):
  70.        
  71.         print "estoy en el evento"
  72.         if evt.GetString() == 'uno':
  73.             self.cmbox = 1;
  74.         if evt.GetString() == 'dos':
  75.             self.cmbox = 2;
  76.         if evt.GetString() == 'tres':
  77.             self.cmbox = 3;
  78.         if evt.GetString() == 'cuatro':
  79.             self.cmbox = 4;
  80.         self.picture.SetBitmap(wx.Bitmap('images/%d.jpeg'%self.cmbox))
  81.         print self.cmbox
  82.        
  83. app = wx.App()
  84. frame = MyFrame(None, title="asdf")
  85. frame.Show(True)
  86. app.MainLoop()

alguna idea???
saludos

Última edición por IamEdo; 28/07/2010 a las 13:34
  #5 (permalink)  
Antiguo 29/07/2010, 15:49
 
Fecha de Ingreso: enero-2010
Mensajes: 21
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Problema con combobox

y finalmente lo resolvi
para el que le interece lo que hice fue agregar el argumento self a todos los botones, luego en la funcion que esta asociada al combobox utilizo un self.nombreboton.SetBitmapLabel(bitmap)
y eso seria
grax por la ayuda

Etiquetas: combobox
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 03:40.