Utilizando un ComboBox en wxPython

Un ComboBox es un control gráfico que despliega una lista de opciones cuando se interactúa con el, permitiendo desde luego la selección de sus ítems y consecuentemente el lanzamiento de un evento de tipoEVT_COMBOBOX. Resulta lógico pensar que la utilidad de un ComboBox se hace notoria cuando se requiere disponer de una serie de opciones en un control que visualmente no ocupe mucho espacio.

El ejemplo siguiente es una mini-aplicación wxPython que contiene dos ComboBox y un TextCtrl, que básicamente lo que hace es mostrar en el TextCtrl una concatenación de las opciones seleccionadas en ambos ComboBox:
import wx

class TestFrame(wx.Frame):
def __init__(self,*args,**kwargs):
wx.Frame.__init__(self,*args,**kwargs)
sizer = wx.BoxSizer(wx.VERTICAL)
# Datos para los ComboBox
nombres = u"Ana|Pablo|Daniela|Jorge|David|Dulce".split("|")
paises = u"México|Colombia|Chile|Argentina|España|Uruguay".split("|")
# Controles gráficos
self.cbbox_nombres = wx.ComboBox(self,-1,choices=nombres,size=(120,25))
self.cbbox_paises = wx.ComboBox(self,-1,choices=paises,size=(120,25))
self.txt = wx.TextCtrl(self, -1, size=(150,25), style=wx.TE_CENTRE)
self.txt.SetBackgroundColour("#d0fefe")
# Agregando controles al sizer
sizer.Add(self.cbbox_nombres, 0, wx.ALIGN_CENTRE|wx.ALL, 10)
sizer.Add(self.cbbox_paises, 0, wx.ALIGN_CENTRE|wx.ALL, 10)
sizer.Add(self.txt, 0, wx.ALIGN_CENTRE|wx.ALL, 10)
# Configurando sizer
self.SetSizer(sizer)
# Configurando eventos
self.Bind(wx.EVT_COMBOBOX, self.OnSelect)
self.Show()

def OnSelect(self,event):
nombre = self.cbbox_nombres.GetValue()
pais = self.cbbox_paises.GetValue()
statxt = nombre + " es de " + pais
self.txt.SetLabel(statxt)


if __name__=='__main__':
app = wx.App()
fr = TestFrame(None, title="ComboBox Test", size=(250,200))
app.MainLoop()



Vamos, un poco más despacio y con algunos detalles extras:

Primero (y como siempre) importamos el módulo wx para tener disponibles las clases que usaremos en el desarrollo de la aplicación. Definimos una clase TestFrame heredada de wx.Frame en la cual colocaremos todos los controles gráficos a utilizar.


Enseguida creamos los datos o listas que vamos a utilizar en los ComboBox, ha de saber que el método split de la clase str devuelve una lista de strings resultantes de cortar la cadena original en los segmentos delimitados por el caracter que se ha pasado como argumento ("|" para este caso).


Luego se crean los controles gráficos (ComboBox y TextCtrl), puede ver que para crear un ComboBox necesita instanciar un objeto de la clase wx.ComboBox, a la cual como argumentos mínimos se le debe indicar el objeto padre (parent), un id, y un lista de valores (choices) que contiene las opciones a desplegar. Adicionalmente puede definir otros keyword arguments como el tamaño y/o la posición del control.

Una vez se han creado los controles, estos se deben agregarse al sizer de la aplicación para que sean organizados acorde a la distribución o algoritmo de posicionamiento seleccionado.

Finalmente, se programa la respuesta que tendrá la aplicación cuando los ComboBox sean manejados por el usuario, para ello se asigna el método OnSelect como el handler de los eventos de tipowx.EVT_COMBOBOX. Note que el método OnSelect contiene dos parámetros obligatorios por default, self que hace referencia a la clase misma y event que contiene información acerca del evento lanzado. En este caso el método OnSelect lo único que hace es tomar los strings seleccionados en cada uno de los ComboBox, y concatenarlos utilizando un nexo cualesquiera, para finalmente asignar la cadena resultante al valor del TextCtrl.

Comentarios

Comments powered by Disqus