我有一个使用TK gui包的ruby程序,我遇到了TkButton的问题,特别是命令部分。我试图在单击按钮时运行同一类中的方法。我的代码如下。我是Ruby的新手,但不是一般的编程。当在gui中单击该按钮时,我得到一个应用程序错误,该错误显示“Error:NameError:unknown option ...”,其中它将按钮中的方法调用标识为错误原因。谁能解释我做错了什么?我正在使用RubyMine开发。
代码:
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 :(得分:0)
您已在类 编辑 - 现在我想到了,我认为,因为test_add
上定义了一个实例方法,但在定义“添加”按钮的上下文中,self
引用了类CalcUIK
}。self
发生在TkButton.new
的一个区块内,self
指的是TkButton
的新实例,它尝试接收test_add
方法,但不将其识别为有效选项。将proc定义为proc { CalcUIK.new.test_add }
以生成将运行该方法的新实例。
我还建议完全移出课堂外的所有TkRoot
,TkButton
等来电,或者将它们移到initialize
上的CalcUIK
方法中。现在,它们在类被评估时运行,但是在类定义的上下文中执行的类与代码无关是非常罕见的。