2014-02-07 69 views
0

我有一個使用TK gui軟件包的紅寶石程序,我在TkButton,特別是命令部分遇到問題。我試圖在點擊按鈕時運行同一個類中的方法。我的代碼如下。我對Ruby非常陌生,但通常不是編程。當在gui中點擊按鈕時,我得到一個應用程序錯誤,指出「Error:NameError:unknown option ...」,它將按鈕中的方法調用標識爲錯誤原因。有人能解釋我做錯了什麼嗎?我正在使用RubyMine進行開發。Ruby TkButton不會運行proc

代碼:

require 'tk' 
    require 'test/unit' 
    require_relative 'calc' 
    require_relative 'calcTest' 

    class CalcUIK 


     def test_add 
     calc = Calc.new 
     expected = Calc.add tk6.get().to_i,tk6.get().to_i 
     tk8['textvariable'] = 'Result: ' + expected 
     end 

     hello = TkRoot.new do 
     title "Hello World" 
     # the min size of window 
     minsize(400,400) 
     end 
     tk1 = TkLabel.new(hello) do 
     text 'Super Calculator' 
     foreground 'red' 
     pack { padx 15; pady 15; side 'left'} 
     end 

     tk5 = TkLabel.new(hello) do 
     text 'Enter two numbers to math' 
     foreground 'blue' 
     pack { padx 15; pady 15; side 'left'} 
     end 

     tk6 = TkEntry.new(hello) do 
     foreground 'blue' 
     pack { padx 15; pady 15; side 'left'} 
     end 

     tk7 = TkEntry.new(hello) do 
     foreground 'blue' 
     pack { padx 15; pady 15; side 'left'} 
     end 

     tk8 = TkLabel.new(hello) do 
     textvariable 
     foreground 'blue' 
     pack { padx 15; pady 15; side 'left'} 
     end 

     tk2 = TkButton.new(hello){ 
     text 'Add' 
     command (proc {self.test_add}) 
     pack('padx'=>'20') 
     pack('side'=>'left') 
     } 
    end 
     Tk.mainloop 

PS我知道這個代碼是一種愚蠢的,但它僅僅是一個虛擬程序來設置一些更重要的事情了。我需要解決的問題是按鈕單擊不執行test_add方法的原因。謝謝。

回答

0

你已經爲你的類名爲test_add一個實例方法,但在上下文中的「添加」按鈕定義,self指類CalcUIK編輯 - 現在我想想,我覺得既然selfTkButton.new塊內發生,selfTkButton新實例,這是試圖接收test_add方法,但不承認它作爲一個有效的選項。定義proc爲proc { CalcUIK.new.test_add }以生成將運行該方法的新實例。

我還建議將所有的TkRootTkButton等要麼調用類外全部,或者把它們轉移到一個initialize方法上CalcUIK。現在,它們是在類被評估時運行的,但是在類定義的上下文中執行的類與代碼無關,這是非常不尋常的。