Hmmm... There are some problems. From: "Jeppe Jakobsen" <jeppe88 / gmail.com> Subject: Re: Q about tk buttons Date: Thu, 13 Apr 2006 22:33:18 +0900 Message-ID: <99b4ad3b0604130633t48adb432n4417c3fd27f3b8f4 / mail.gmail.com> > require "tk" > #methods > def guess > if (guess.value == right_guess.value) > status.value = "Correct!" > else > number_of_guess.numeric += 1 > status.value = "Sorry, no luck" > end > end Probably, you'll want to refer local variables on main. But those variables are out of scope in the method. If arguments bothers you, you can use a Proc object instead of a method. Next, please see here. > def guess ^^^^^ > guess = TkVariable.new() ^^^^^ There is conflict of names. So, "proc{guess}" refers the local variable. If you want to call "guess" method, you must use "proc{guess()}". > root = Tk.mainloop Probably, the return value is not useful. If I were you, I may write such like as the following. ---------------------------------------------------- require 'tk' right_guess = rand(21) number_of_guess = TkVariable.new(0) Tk.root.title('Number guess') TkLabel.new(:textvariable=>number_of_guess).pack(:side=>:top, :pady=>10) status = TkLabel.new(:text=>"Entry your guess and press the button", :width=>37).pack(:side=>:bottom, :pady=>10) entry = TkEntry.new.pack(:side=>:top, :pady=>10) guess_cmd = proc{ value = entry.value if value.empty? || value.to_i != right_guess number_of_guess.numeric += 1 status.text('Sorry, no luck') else status.text('Correct!') end } button = TkButton.new(:text=>'Guess', :command=>guess_cmd).pack(:side=>:top, :p\ady=>10) entry.bind('Return', proc{button.invoke}) Tk.mainloop ---------------------------------------------------- -- Hidetoshi NAGAI (nagai / ai.kyutech.ac.jp)