Skip to content

HowTo : RadioBox widget

Martin Corino edited this page May 7, 2024 · 5 revisions
     About      FAQ      User Guide      Reference documentation

wxRuby RadioBox Widget

This wxRuby guide demonstrates how to use the Wx::RadioBox widget with it’s various styles, features and functions. A complete list of options will be included here together with code examples for your convenience.

wxRuby RadioBox syntax

The syntax for creating a RadioBox widget in wxRuby is as follows:

rb = Wx::RadioBox.new(parent, id, label, pos, size, choices, major_dimension, style, validator, name)

Parameter descriptions:

  • parent : Wx::Window
    the parent window (widget) such as a Wx::Panel.
  • id : Integer
    Button ID. Wx::ID_ANY indicates a default value.
  • label : String
    Optional text which appears on the widget. Empty by default.
  • pos : Array(Integer,Integer) or Wx::Point
    Optional coordinates for the position of the topleft corner of the widget. Default is Wx::DEFAULT_POSITION.
  • size : Array(Integer,Integer) or Wx::Size
    Optional dimensions of the widget. Default is Wx::DEFAULT_SIZE.
  • style : Integer
    Optional styling mask for the button (such as alignment). Default is 0.
  • choices : Array<String>
    A list of strings containing the labels for the RadioButtons. Under default circumstances, the number of strings will correspond to the number of RadioButtons created. Default is nil (no labels).
  • major_dimension : Integer
    Specifies the maximum number of rows (if style contains Wx::RA_SPECIFY_ROWS) or columns (if style contains Wx::RA_SPECIFY_COLS) for a two-dimensional radiobox. The default value of 0 means to use the number of items, i.e. choices.size.
  • validator : Wx::Validator
    Optional Window validator. Default is nil.
  • name : String
    Optional window name. Default is Wx::RADIO_BOX_NAME_STR.

Note: As with all windows, keyword constructor alternatives for all arguments but the 'parent' argument are available. See here for more information.

RadioBox Styles

Available styles for the RadioBox widget:

Button Style Description
Wx::RA_SPECIFY_ROWS When this style is selected, the value passed to major_dimension refers to max rows.
Wx::RA_SPECIFY_COLS When this style is selected, the int passed to major_dimension refers to max cols. (Default style).

RadioBox Methods

A list of useful methods which can be used on the RadioBox widget.

Method Description
enable_item(item, enable) Enables/Disables the RadioButton at the index passed into the function.
find_string(string, case) Searches for a RadioButton with the given string, returning the index position if found.
get_count Returns the number of items in the RadioBox
get_column_count Returns the number of columns in the RadioBox
get_row_count Returns the number of rows in the RadioBox
get_selection Returns the index of the currently selected item.
get_string(n) Gets the String of the RadioButton at the specified index position.
get_string_selection Returns the Label of the currently selected RadioButton.
set_selection(n) Sets the current Selection to the RadioButton at the specified index.
set_string(n, string) Sets the Label of the RadioButton at the given index, to the given String.

Example Code

In this example code, we setup a RadioBox which contains 4 RadioButtons.

The first thing we do is define a list of values which will act as the labels for the RadioButtons. We have defined 4 labels in the array values. We will then pass this array into the Wx::RadioBox constructor (choices parameter).

Next we make the RadioBox widget and connect it to the Wx::EVT_RADIOBOX event and the method we made, radio_box_event. This function uses get_string_selection on the RadioBox, which returns the label of the currently selected RadioButton.

require 'wx'

class MyWindow < Wx::Frame
  def initialize(title)
    super(nil, title: title)
    @panel = Wx::Panel.new(self)

    values = %w[Bread Butter Milk Eggs]

    @rbox = Wx::RadioBox.new(@panel, label: 'Radio Box', pos: [50,50],
                             choices: values, style: Wx::RA_SPECIFY_ROWS)
    @rbox.evt_radiobox(Wx::ID_ANY) { radio_box_event }

    @label = Wx::StaticText.new(@panel, label: 'You have selected: None', pos: [150, 100])

    centre
  end

  def radio_box_event
    rboxSelection = @rbox.get_string_selection
    @label.set_label_text("You have selected: #{rboxSelection}")
  end
end

Wx::App.run do
  window = MyWindow.new("wxRuby RadioBox Guide")
  window.show
end

This is what the RadioBox looks like with the Wx::RA_SPECIFY_ROWS style:

screenshot1

If we change this to the Wx::RA_SPECIFY_COLS style…

require 'wx'

class MyWindow < Wx::Frame
  def initialize(title)
    super(nil, title: title)
    @panel = Wx::Panel.new(self)

    values = %w[Bread Butter Milk Eggs]

    @rbox = Wx::RadioBox.new(@panel, label: 'Radio Box', pos: [50,50],
                             choices: values, style: Wx::RA_SPECIFY_COLS)
    @rbox.evt_radiobox(Wx::ID_ANY) { radio_box_event }

    @label = Wx::StaticText.new(@panel, label: 'You have selected: None', pos: [150, 100])

    centre
  end

  def radio_box_event
    rboxSelection = @rbox.get_string_selection
    @label.set_label_text("You have selected: #{rboxSelection}")
  end
end

Wx::App.run do
  window = MyWindow.new("wxRuby RadioBox Guide")
  window.show
end

It will look like this:

screenshot2

Creating a 2 Dimensional RadioBox

We can also make 2D RadioBoxes by keeping the value of the MajorDimension lower than the number of values. If there are 4 values, and the major dimension is specified as 2 with the style Wx::RA_SPECIFY_ROWS, then only two rows will be created.

Since there 4 values, they will be split equally between both rows.

require 'wx'

class MyWindow < Wx::Frame
  def initialize(title)
    super(nil, title: title)
    @panel = Wx::Panel.new(self)

    values = %w[Bread Butter Milk Eggs]

    @rbox = Wx::RadioBox.new(@panel, label: 'Radio Box', pos: [50,50],
                             choices: values, style: Wx::RA_SPECIFY_ROWS,
                             major_dimension: 2)
    @rbox.evt_radiobox(Wx::ID_ANY) { radio_box_event }

    @label = Wx::StaticText.new(@panel, label: 'You have selected: None', pos: [150, 150])

    centre
  end

  def radio_box_event
    rboxSelection = @rbox.get_string_selection
    @label.set_label_text("You have selected: #{rboxSelection}")
  end
end

Wx::App.run do
  window = MyWindow.new("wxRuby RadioBox Guide")
  window.show
end

This will result in the below output:

screenshot3

Clone this wiki locally