how to change the status of a checkbutton interactively

Discussion in 'Ruby' started by chen1069osu, Jun 2, 2014.

  1. chen1069osu

    chen1069osu Guest

    Hi all,

    I am new to tk. I try to build a simple GUI with several widgets following the tutorials from this website:

    One of the widgets I copy from website is checkbutton as following:

    require 'tk'
    require 'tkextlib/tile'

    root = {title "Feet to Meters"}
    $measureSystem =
    check = {
    text 'Use Metric';
    command 'metricChanged';
    variable $measureSystem;
    onvalue 'metric';
    offvalue 'imperial';


    when I check the checkbutton, I get an error message as following:

    NameError: undefined local variable or method `metricChanged' for main:Object
    ---< backtrace of Ruby side >-----
    C:/Ruby200-x64/lib/ruby/2.0.0/tk.rb:1456:in `cb_eval'
    C:/Ruby200-x64/lib/ruby/2.0.0/tk.rb:1456:in `eval_cmd'
    C:/Ruby200-x64/lib/ruby/2.0.0/tk.rb:1456:in `cb_eval'
    C:/Ruby200-x64/lib/ruby/2.0.0/tk.rb:1403:in `call'
    C:/Ruby200-x64/lib/ruby/2.0.0/tk.rb:1599:in `block in callback'
    C:/Ruby200-x64/lib/ruby/2.0.0/tk.rb:1598:in `catch'
    C:/Ruby200-x64/lib/ruby/2.0.0/tk.rb:1598:in `callback'
    C:/Ruby200-x64/lib/ruby/2.0.0/tk.rb:1305:in `mainloop'
    C:/Ruby200-x64/lib/ruby/2.0.0/tk.rb:1305:in `block in <module:TkCore>'
    ---< backtrace of Tk side >-------
    invoked from within
    "rb_out c00001"
    invoked from within
    ".w00000 invoke "
    invoked from within
    ".w00000 instate !disabled { .w00000 invoke } "
    invoked from within
    ".w00000 instate pressed { .w00000 state !pressed; .w00000 instate !disabled { .w00000 invoke } } "
    (command bound to event)

    so my question is that why this happens? How come I cannot set the check or uncheck from user end or set its status interactively?

    Thank you so much in advance for your help.
    chen1069osu, Jun 2, 2014
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.