Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Wxpython: Paso de parámetros entre métodos

Estas en el tema de Wxpython: Paso de parámetros entre métodos en el foro de Python en Foros del Web. Tengo una duda de como se manejan los parámetros en python específicamente con wxpython por ejemplo lo que quiero realizar es teniendo una clase principal ...
  #1 (permalink)  
Antiguo 27/02/2013, 15:01
 
Fecha de Ingreso: enero-2011
Ubicación: En un Cuarto Cubierto de Pasto Verde
Mensajes: 95
Antigüedad: 13 años, 3 meses
Puntos: 3
Wxpython: Paso de parámetros entre métodos

Tengo una duda de como se manejan los parámetros en python específicamente con wxpython por ejemplo lo que quiero realizar es teniendo una clase principal llamada frame en el construcctor de mi aplicación tengo varios metodos y quiero hacer lo siguiente:

Código Python:
Ver original
  1. class principal(wx.Frame):
  2.  
  3. #--------------------------------------------------------------------------------
  4. #Constructor principal
  5.     def __init__(self):
  6.         wx.Frame.__init__(self, None, wx.ID_ANY,
  7.                           "Paso Parametros", size=(500, 400))
  8.         self.Bind(wx.EVT_CLOSE, self.OnClose)
  9.         self.meSystem()
  10.         self.InitUI()
  11.         self.Centre()
  12.         self.Show()
  13.  
  14. #----------------------------------------------------------------------..........
  15. # Construccion de la GUI
  16.     def InitUI(self):
  17.        
  18.         menubar = wx.MenuBar()
  19.        
  20.         fileMenu = wx.Menu()
  21.         fitem = fileMenu.Append(wx.ID_EXIT, 'Quit', 'Quit application')
  22.         menubar.Append(fileMenu, '&File')
  23.         self.SetMenuBar(menubar)
  24.         self.Bind(wx.EVT_MENU, self.OnQuit, fitem)
  25.        
  26. ################# Tengo este componente combobox agregado el cual llama al metodo OnSelect
  27.  
  28.         hbox3= wx.BoxSizer(wx.HORIZONTAL)
  29.         cb = wx.ComboBox(self, pos=(50, 30), choices=self.distros,
  30.             style=wx.CB_READONLY)
  31.         cb.Bind(wx.EVT_COMBOBOX, self.OnSelect)
  32.  
  33. ################# en el metodo OnSelect tengo este código el odigo que imprime la selección del combobox
  34.  
  35.      def OnSelect(self, e):
  36.        
  37.            i = e.GetString()
  38.            print "Has seleccionado de combobox:\n" + i
  39.            self.etiquetas.SetLabel(i)
  40.  
  41. ################# Regreso el control a Frame y cambio el valor de mi etiqueta con el valor que regresa el metodo OnSelect
  42.      
  43.         hbox4 = wx.BoxSizer(wx.HORIZONTAL)
  44.         self.etiquetas = wx.StaticText(self,-1,label=u"Seleccionado del comboBox")
  45.         hbox4.Add(self.etiquetas,border=10)              
  46.         vbox.Add(hbox4, flag=wx.LEFT, border=30)
  47.         vbox.Add((-1, 10))
  48.  
  49. ################# Hasta aqui todo bien el problema que tengo ahora es que esa misma variable self.etiquetas que en realidad
  50. #################contiene el valor de regreso del combobox necesito utilizarla dentro de otro metodo pero no encuentro como manejar dicha variable para enviarla al
  51. #################metodo siguiente llamado otroMetodo:
  52.  
  53.     def otroMetodo(self, e):
  54.             print self.resultado

Resumiendo obtengo del metodo onSelect el string de la selección del usuario en la variable self.etiquetas con la cual actualizo la variable en mi método InitUI, lo que necesito hacer es ese string del método InitUI actualizado desde el comboBox enviarlo a un nuevo método para hacer uso de esa selección dentro de ese otro método.

De ante mano muchas gracias agradezco cualquier ayuda, buena tarde.
  #2 (permalink)  
Antiguo 27/02/2013, 18:54
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Wxpython: Paso de parámetros entre métodos

¿Puedes poner código que copiando y pegandolo en un archivo corra?
¿Puedes poner tu pregunta de una mas clara y directa?
La verdad no entiendo, lo quieres decir o hacer.
  #3 (permalink)  
Antiguo 27/02/2013, 19:39
 
Fecha de Ingreso: enero-2011
Ubicación: En un Cuarto Cubierto de Pasto Verde
Mensajes: 95
Antigüedad: 13 años, 3 meses
Puntos: 3
Respuesta: Wxpython: Paso de parámetros entre métodos

Cita:
Iniciado por razpeitia Ver Mensaje
¿Puedes poner código que copiando y pegandolo en un archivo corra?
¿Puedes poner tu pregunta de una mas clara y directa?
La verdad no entiendo, lo quieres decir o hacer.
Hola razpeitia, gracias por tu respuesta acá coloco un código ejecutable para mejor comprensión de lo que deseo hacer, debajo de el ejemplo coloco con palabras lo que intento hacer.

Código Python:
Ver original
  1. import wx
  2.  
  3. class monti(wx.Frame):
  4.  
  5. #--------------------------------------------------------------------------------
  6. #Constructor principal
  7.     def __init__(self):
  8.         wx.Frame.__init__(self, None, wx.ID_ANY,
  9.                           "Paso de parametros entre metodos", size=(500, 200))
  10.         self.Bind(wx.EVT_CLOSE, self.OnClose)
  11.         self.InitUI()
  12.         self.Centre()
  13.         self.Show()
  14.  
  15. #----------------------------------------------------------------------..........
  16. # Construccion de la GUI
  17.     def InitUI(self):        
  18.        
  19.         distros = ['arch','debian','ubuntu']
  20.        
  21.         panel = wx.Panel(self)
  22.        
  23.         vbox = wx.BoxSizer(wx.VERTICAL)
  24.        
  25.         hbox3= wx.BoxSizer(wx.HORIZONTAL)
  26.         cb = wx.ComboBox(self, pos=(50, 30), choices=distros,
  27.             style=wx.CB_READONLY)
  28.         cb.Bind(wx.EVT_COMBOBOX, self.OnSelect)
  29.        
  30.         hbox3.Add(cb,border=10)
  31.         vbox.Add(hbox3, flag=wx.LEFT, border=30)  
  32.         panel.SetSizer(vbox)
  33.         vbox.Add((-1, 15))    
  34.        
  35.         hbox4 = wx.BoxSizer(wx.HORIZONTAL)
  36.         self.etiquetas = wx.StaticText(self,-1,label=u"Selecciona una distro")
  37.         hbox4.Add(self.etiquetas,border=10)              
  38.         vbox.Add(hbox4, flag=wx.LEFT, border=30)
  39.         vbox.Add((-1, 10))
  40.        
  41.         hbox7 = wx.BoxSizer(wx.HORIZONTAL)
  42.         self.etiqueta = wx.StaticText(self,-1,label=u"Enviar parametro proveniente de OnSelect a onBurn  ")
  43.         hbox7.Add(self.etiqueta,border=10)              
  44.         vbox.Add(hbox7, flag=wx.LEFT, border=30)
  45.         btnGra = wx.Button(self, label="Enviar...")
  46.         btnGra.Bind(wx.EVT_BUTTON, self.onBurn)
  47.         hbox7.Add(btnGra,wx.RIGHT,border=10)  
  48.         vbox.Add(hbox7, flag=wx.LEFT, border=30)    
  49.         vbox.Add((-1, 10))
  50. #----------------------------------------------------------------------
  51.     def onBurn(self, e):
  52.           print "Aqui imprimir el valor seleccionado en el combobox"  
  53. #----------------------------------------------------------------------
  54.     def OnSelect(self, e):
  55.         i = e.GetString()
  56.         print "Ha seleccionado la distro:\n" + i
  57.         self.etiquetas.SetLabel(i)
  58. #----------------------------------------------------------------------    
  59.     def OnQuit(self, e):
  60.       dial = wx.MessageDialog(None, 'Are you sure to quit?', 'Question',
  61.       wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
  62.       ret = dial.ShowModal()
  63.       if ret == wx.ID_YES:
  64.           self.Destroy()
  65.       else:
  66.           self.Show()
  67. #----------------------------------------------------------------------      
  68.     def OnClose(self, event):
  69.         dial = wx.MessageDialog(None, 'Are you sure to quit?', 'Question',
  70.         wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
  71.         ret = dial.ShowModal()
  72.         if ret == wx.ID_YES:
  73.             self.Destroy()
  74.         else:
  75.             self.Show()
  76. #----------------------------------------------------------------------
  77. # Run the program
  78. if __name__ == "__main__":
  79.     app = wx.App(False)
  80.     frame = monti()
  81.     app.MainLoop()

Para que no batalles copiando pegando subí mi ejemplo a mi dropbox y lo comparto.

Lo que intento hacer es que, una vez seleccionado una cadena de el combobox como se ve en el ejemplo acciono el método OnSelect el cual regresa al constructor el nombre de la selección y actualiza la etiqueta etiquetas con la selección, hasta aquí todo bien el problema que tengo es que ahora esa misma "variable" que contiene la selección del combobox la quiero ocupar dentro del metodo llamado onBurn que ejecuto cuando presiono el botón enviar.

*Soy usuario GNU/Linux Debian.

Espero me entienda si no cualquier cosa por aquí ando, muchas gracias saludos.
  #4 (permalink)  
Antiguo 27/02/2013, 19:53
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Wxpython: Paso de parámetros entre métodos

Código Python:
Ver original
  1. import wx
  2.  
  3. class monti(wx.Frame):
  4.  
  5. #--------------------------------------------------------------------------------
  6. #Constructor principal
  7.     def __init__(self):
  8.         wx.Frame.__init__(self, None, wx.ID_ANY,
  9.                           "Paso de parametros entre metodos", size=(500, 200))
  10.         self.Bind(wx.EVT_CLOSE, self.OnClose)
  11.         self.InitUI()
  12.         self.Centre()
  13.         self.Show()
  14.  
  15. #----------------------------------------------------------------------..........
  16. # Construccion de la GUI
  17.     def InitUI(self):        
  18.        
  19.         distros = ['arch','debian','ubuntu']
  20.         self.distro = None
  21.  
  22.         panel = wx.Panel(self)
  23.        
  24.         vbox = wx.BoxSizer(wx.VERTICAL)
  25.        
  26.         hbox3= wx.BoxSizer(wx.HORIZONTAL)
  27.         cb = wx.ComboBox(self, pos=(50, 30), choices=distros,
  28.             style=wx.CB_READONLY)
  29.         cb.Bind(wx.EVT_COMBOBOX, self.OnSelect)
  30.        
  31.         hbox3.Add(cb,border=10)
  32.         vbox.Add(hbox3, flag=wx.LEFT, border=30)  
  33.         panel.SetSizer(vbox)
  34.         vbox.Add((-1, 15))    
  35.        
  36.         hbox4 = wx.BoxSizer(wx.HORIZONTAL)
  37.         self.etiquetas = wx.StaticText(self,-1,label=u"Selecciona una distro")
  38.         hbox4.Add(self.etiquetas,border=10)              
  39.         vbox.Add(hbox4, flag=wx.LEFT, border=30)
  40.         vbox.Add((-1, 10))
  41.        
  42.         hbox7 = wx.BoxSizer(wx.HORIZONTAL)
  43.         self.etiqueta = wx.StaticText(self,-1,label=u"Enviar parametro proveniente de OnSelect a onBurn  ")
  44.         hbox7.Add(self.etiqueta,border=10)              
  45.         vbox.Add(hbox7, flag=wx.LEFT, border=30)
  46.         btnGra = wx.Button(self, label="Enviar...")
  47.         btnGra.Bind(wx.EVT_BUTTON, self.onBurn)
  48.         hbox7.Add(btnGra,wx.RIGHT,border=10)  
  49.         vbox.Add(hbox7, flag=wx.LEFT, border=30)    
  50.         vbox.Add((-1, 10))
  51. #----------------------------------------------------------------------
  52.     def onBurn(self, e):
  53.           print "Aqui imprimir el valor seleccionado en el combobox"
  54.           if self.distro is None:
  55.             print "    Aun no se ha seleccionado en el combobox"
  56.           else:
  57.             print "    Distro seleccioado %s" % (self.distro,)
  58. #----------------------------------------------------------------------
  59.     def OnSelect(self, e):
  60.         self.distro = e.GetString()
  61.         print "Ha seleccionado la distro:\n" + self.distro
  62.         self.etiquetas.SetLabel(self.distro)
  63. #----------------------------------------------------------------------      
  64.     def OnClose(self, event):
  65.         dial = wx.MessageDialog(None, 'Are you sure to quit?', 'Question',
  66.         wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
  67.         ret = dial.ShowModal()
  68.         dial.Destroy()
  69.         if ret == wx.ID_YES:
  70.             self.Destroy()
  71.         else:
  72.             self.Show()
  73. #----------------------------------------------------------------------
  74. # Run the program
  75. if __name__ == "__main__":
  76.     app = wx.App(False)
  77.     frame = monti()
  78.     app.MainLoop()

Creo que ya mas o menos entendí (eso espero). Lo que quieres es mantener el valor de lo que tienes seleccionado y eso lo puedes hacer fácilmente con atributo de la clase. Nada especial.
  #5 (permalink)  
Antiguo 27/02/2013, 20:14
 
Fecha de Ingreso: enero-2011
Ubicación: En un Cuarto Cubierto de Pasto Verde
Mensajes: 95
Antigüedad: 13 años, 3 meses
Puntos: 3
Respuesta: Wxpython: Paso de parámetros entre métodos

Cita:
Iniciado por razpeitia Ver Mensaje
[HIGHLIGHT="Python"]
Creo que ya mas o menos entendí (eso espero). Lo que quieres es mantener el valor de lo que tienes seleccionado y eso lo puedes hacer fácilmente con atributo de la clase. Nada especial.
Muchisimas gracias era justo lo que necesitaba, ya puedo continuar con lo que estoy haciendo...

Etiquetas: funcion, metodo, parametros
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




La zona horaria es GMT -6. Ahora son las 21:48.