|  | #!/bin/env ruby
 | 
  
    |  | 
 | 
  
    |  | # print button shows the value of control variable $phone
 | 
  
    |  | # the two set buttons will set the control variable to their adjacent radio
 | 
  
    |  | # At first clicking the radio button and then print shows the control variable
 | 
  
    |  | # is being updated.
 | 
  
    |  | 
 | 
  
    |  | # Clicking a set button changes the variable to it its adjacent radio, but this
 | 
  
    |  | # does not change the radio button selected.
 | 
  
    |  | # Also once the variable has been set in code, ruby ceases to update the variable,
 | 
  
    |  | # clicking radio buttons and then print results in no change. From here on it 
 | 
  
    |  | # can only be changed in code.
 | 
  
    |  | # 
 | 
  
    |  | require 'tk'
 | 
  
    |  | require 'tkextlib/tile'
 | 
  
    |  | root = TkRoot.new {title "contro variable test"}
 | 
  
    |  | content = Tk::Tile::Frame.new(root) {padding "4 4 4 4"}.grid( :sticky => 'ew')
 | 
  
    |  | TkGrid.columnconfigure root, 1, :weight => 1
 | 
  
    |  | TkGrid.columnconfigure root, 2, :weight => 1
 | 
  
    |  | TkGrid.rowconfigure root, 1, :weight => 1
 | 
  
    |  | TkGrid.rowconfigure root, 2, :weight => 1
 | 
  
    |  | TkGrid.rowconfigure root, 3, :weight => 1
 | 
  
    |  | 
 | 
  
    |  | $phone = TkVariable.new
 | 
  
    |  | home = Tk::Tile::RadioButton.new(root) {
 | 
  
    |  |     text 'Home'; variable $phone; value 'home'}
 | 
  
    |  |         .grid( :column => 1, :row => 1, :sticky => 'w')
 | 
  
    |  | office = Tk::Tile::RadioButton.new(root) {
 | 
  
    |  |     text 'Office'; variable $phone; value 'office'}
 | 
  
    |  |         .grid( :column => 1, :row => 2, :sticky => 'w')
 | 
  
    |  | mobile = Tk::Tile::RadioButton.new(root) {
 | 
  
    |  |     text 'Mobile'; variable $phone; value 'mobile'}
 | 
  
    |  |         .grid( :column => 1, :row => 3, :sticky => 'w')
 | 
  
    |  | 
 | 
  
    |  | abutton = Tk::Tile::Button.new(root) {text 'print'; command 'a_button'}
 | 
  
    |  |     .grid( :column => 2, :row => 1, :sticky => 'ew')
 | 
  
    |  | bbutton = Tk::Tile::Button.new(root) {text '<- set'; command 'b_button'}
 | 
  
    |  |     .grid( :column => 2, :row => 2, :sticky => 'ew')
 | 
  
    |  | cbutton = Tk::Tile::Button.new(root) {text '<- set' ; command 'c_button'}
 | 
  
    |  |     .grid( :column => 2, :row => 3, :sticky => 'ew')
 | 
  
    |  | 
 | 
  
    |  | TkWinfo.children(root).each {|w| TkGrid.configure w, :padx => 5, :pady => 5}
 | 
  
    |  | home.focus
 | 
  
    |  | root.bind("Return") {home}
 | 
  
    |  | 
 | 
  
    |  | def a_button
 | 
  
    |  |     puts ("control variable = #{$phone}")
 | 
  
    |  | end
 | 
  
    |  | 
 | 
  
    |  | def b_button
 | 
  
    |  |     puts("setting contol variable to office")
 | 
  
    |  |     $phone = 'office'
 | 
  
    |  | end
 | 
  
    |  | 
 | 
  
    |  | def c_button
 | 
  
    |  |     puts("setting contol variable to mobile")
 | 
  
    |  |     $phone = 'mobile' 
 | 
  
    |  | end
 | 
  
    |  | 
 | 
  
    |  | Tk.mainloop
 |