wxPython - RadioButton y RadioBox

Un botón de opción generalmente representa uno de los muchos botones seleccionables disponibles para el usuario en un grupo. Cada botón, un objeto de la clase wx.RadioButton lleva una etiqueta de texto junto a un botón redondo.

Para crear un grupo de botones seleccionables mutuamente, el parámetro de estilo del primer objeto wxRadioButton se establece en wx.RB_GROUP. Los objetos de botón posteriores se agregan a un grupo.

La API de wxPython también consta de la clase wx.RadioBox. Su objeto ofrece un borde y una etiqueta al grupo. Los botones del grupo se pueden organizar horizontal o verticalmente.

El constructor wx.RadioButton tiene el siguiente aspecto:

Wx.RadioButton(parent, id, label, pos, size, style)

El parámetro de estilo está presente solo para el primer botón del grupo. Su valor es wx.RB_GROUP. Para los botones siguientes del grupo, se puede utilizar opcionalmente el parámetro de estilo wx.RB_SINGLE.

Carpeta de eventos wx.RadioButton wx.EVT_RADIOBUTTON activa el controlador asociado cada vez que se hace clic en cualquiera de los botones del grupo.

Dos métodos importantes de la clase wx.RadioButton son SetValue (), para seleccionar o anular la selección de un botón mediante programación, y GetValue (), que devuelve verdadero si se selecciona un botón y, de lo contrario, es falso.

UN wx.RadioBoxcoloca una colección de botones mutuamente excluyentes en un cuadro estático. Cada botón del grupo toma su etiqueta de un objeto List que actúa como parámetro de 'opciones' para el constructor wx.RadioBox.

Los botones de RadioBox se distribuyen en filas o columnas. Para ese parámetro de 'estilo' del constructor debe ser wx.RA_SPECIFY_ROWS o wx.RA_SPECIFY_COLS. El número de filas / columnas se decide por el valor del parámetro 'majordimensions'.

El prototipo del constructor wx.RadioBox es -

Wx.RadioBox(parent, id, label, pos, size, choices[], initialdimensions, style)

Los siguientes son los métodos importantes en la clase wx.RadioBox:

SN Métodos y descripción
1

GetSelection()

Devuelve el índice del elemento seleccionado.

2

SetSelection()

Selecciona un elemento mediante programación

3

GetString()

Devuelve la etiqueta del artículo seleccionado

4

SetString()

Asigna la etiqueta al artículo seleccionado

5

Show()

Muestra u oculta el elemento del índice dado.

El archivador de eventos asociado con el objeto wx.RadioBox es wx.EVT_RADIOBOX. El controlador de eventos asociado identifica la selección del botón y la procesa.

Ejemplo

El siguiente ejemplo demuestra el uso de RadioBox y RadioButton. En primer lugar, se colocan en el panel tres RadioButtons, agrupados especificando el estilo wx.RB_GROUP.

self.rb1 = wx.RadioButton(pnl,11, label = 'Value A', pos = (10,10), style = wx.RB_GROUP) 
self.rb2 = wx.RadioButton(pnl,22, label = 'Value B',pos = (10,40)) 
self.rb3 = wx.RadioButton(pnl,33, label = 'Value C',pos = (10,70))

RadioBox, por otro lado, lee las etiquetas de sus botones de un objeto lblList [].

lblList = ['Value X', 'Value Y', 'Value Z']     
self.rbox = wx.RadioBox(pnl,label = 'RadioBox', pos = (80,10), choices = lblList ,
   majorDimension = 1, style = wx.RA_SPECIFY_ROWS)

Se declaran dos carpetas de eventos, una para grupo de radio y otra para RadioBox.

self.Bind(wx.EVT_RADIOBUTTON, self.OnRadiogroup) 
self.rbox.Bind(wx.EVT_RADIOBOX,self.onRadioBox)

Los controladores de eventos correspondientes identifican el botón seleccionado y muestran el mensaje en la ventana de la consola.

def OnRadiogroup(self, e): 
   rb = e.GetEventObject() 
   print rb.GetLabel(),' is clicked from Radio Group' 
	
def onRadioBox(self,e): 
   print self.rbox.GetStringSelection(),' is clicked from Radio Box'

El código completo es el siguiente:

import wx   

class Example(wx.Frame): 
            
   def __init__(self, parent, title): 
      super(Example, self).__init__(parent, title = title,size = (300,200)) 
         
      self.InitUI() 
		
   def InitUI(self):    
      pnl = wx.Panel(self)
		
      self.rb1 = wx.RadioButton(pnl,11, label = 'Value A',
         pos = (10,10), style = wx.RB_GROUP) 
      self.rb2 = wx.RadioButton(pnl,22, label = 'Value B',pos = (10,40)) 
      self.rb3 = wx.RadioButton(pnl,33, label = 'Value C',pos = (10,70)) 
      self.Bind(wx.EVT_RADIOBUTTON, self.OnRadiogroup)
		
      lblList = ['Value X', 'Value Y', 'Value Z'] 
		  
      self.rbox = wx.RadioBox(pnl, label = 'RadioBox', pos = (80,10), choices = lblList,
         majorDimension = 1, style = wx.RA_SPECIFY_ROWS) 
      self.rbox.Bind(wx.EVT_RADIOBOX,self.onRadioBox) 
         
      self.Centre() 
      self.Show(True)    
		
   def OnRadiogroup(self, e): 
      rb = e.GetEventObject() 
      print rb.GetLabel(),' is clicked from Radio Group' 
		
   def onRadioBox(self,e): 
      print self.rbox.GetStringSelection(),' is clicked from Radio Box' 
   
ex = wx.App() 
Example(None,'RadioButton and RadioBox') 
ex.MainLoop()

El código anterior produce la siguiente salida:

Se hace clic en el valor B desde el grupo de radio

Se hace clic en el valor C desde el grupo de radio

Se hace clic en el valor Y desde Radio Box

Se hace clic en Value X desde Radio Box