wxPython - RadioButton e RadioBox
Um botão de rádio geralmente representa um dos muitos botões selecionáveis disponíveis para o usuário em um grupo. Cada botão, um objeto da classe wx.RadioButton, carrega um rótulo de texto próximo a um botão redondo.
Para criar um grupo de botões selecionáveis mutuamente, o parâmetro de estilo do primeiro objeto wxRadioButton é definido como wx.RB_GROUP. Os objetos de botão subsequentes são adicionados a um grupo.
A API wxPython também consiste na classe wx.RadioBox. Seu objeto oferece uma borda e um rótulo ao grupo. Os botões do grupo podem ser organizados horizontal ou verticalmente.
O construtor wx.RadioButton se parece com -
Wx.RadioButton(parent, id, label, pos, size, style)
O parâmetro de estilo está presente apenas para o primeiro botão do grupo. Seu valor é wx.RB_GROUP. Para os botões subsequentes no grupo, o parâmetro de estilo wx.RB_SINGLE pode ser usado opcionalmente.
wx.RadioButton fichário de eventos wx.EVT_RADIOBUTTON aciona o manipulador associado sempre que qualquer um dos botões no grupo é clicado.
Dois métodos importantes da classe wx.RadioButton são SetValue () - para selecionar ou desmarcar um botão programaticamente - e GetValue () - que retorna verdadeiro se um botão for selecionado e falso caso contrário.
UMA wx.RadioBoxcoloca uma coleção de botões mutuamente exclusivos em uma caixa estática. Cada botão no grupo obtém seu rótulo de um objeto List que atua como parâmetro de 'escolhas' para o construtor wx.RadioBox.
Os botões no RadioBox são dispostos em linhas ou colunas. Para esse 'estilo', o parâmetro do construtor deve ser wx.RA_SPECIFY_ROWS ou wx.RA_SPECIFY_COLS. O número de linhas / colunas é decidido pelo valor do parâmetro 'majordimensions'.
O protótipo do construtor wx.RadioBox é -
Wx.RadioBox(parent, id, label, pos, size, choices[], initialdimensions, style)
A seguir estão os métodos importantes na classe wx.RadioBox -
SN | Métodos e Descrição |
---|---|
1 | GetSelection() Retorna o índice do item selecionado |
2 | SetSelection() Seleciona um item programaticamente |
3 | GetString() Retorna o rótulo do item selecionado |
4 | SetString() Atribui o rótulo ao item selecionado |
5 | Show() Mostra ou esconde o item do índice dado |
O fichário de eventos associado ao objeto wx.RadioBox é wx.EVT_RADIOBOX. O manipulador de eventos associado identifica a seleção do botão e a processa.
Exemplo
O exemplo a seguir demonstra o uso de RadioBox e de RadioButton. Em primeiro lugar, três RadioButtons, agrupados especificando o estilo wx.RB_GROUP são colocados no painel.
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))
O RadioBox, por outro lado, lê rótulos para seus botões de um 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)
Dois fichários de evento, um para grupo de rádio e outro para RadioBox, são declarados.
self.Bind(wx.EVT_RADIOBUTTON, self.OnRadiogroup)
self.rbox.Bind(wx.EVT_RADIOBOX,self.onRadioBox)
Os manipuladores de eventos correspondentes identificam o botão selecionado e exibem a mensagem na janela do console.
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'
O código completo é o seguinte -
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()
O código acima produz a seguinte saída -
O valor B é clicado no grupo de rádio
Valor C é clicado no Grupo de Rádio
O valor Y é clicado na caixa de rádio
O valor X é clicado na caixa de rádio