作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
如果要用 Ruby 制作一个 Tk GUI 并制作多个具有不同全局变量名称的复选框。最有效的方法是什么?
我找到了 instance_variable_set
,但这不适合我的场景。
我想知道是否有像 global_variable_set
这样的东西。
例如。
info = [orange,apple,banana,grape,watermelon]
$var = TkVariable.New
info.each_with_index {|inf,index|
TkCheckButton.new(frame1) do
text "#{inf}"
onvalue "#{inf}"
variable global_variable_set("$var#{index}", inf)
end
end
最佳答案
I wondered if there was such [a] thing as something like a
global_variable_set
.
是的——它是 Module#module_eval
.这是您的代码,经过修改后可以使用它:
require 'tk'
$root = TkRoot.new
$frame1 = Tk::Tile::Frame.new $root
check_buttons = []
info = %w[orange apple banana grape watermelon]
info.each_with_index do |inf,index|
global_name = "$var#{index}"
cb = Tk::Tile::CheckButton.new $frame1
cb.text "#{inf}"
cb.onvalue "#{inf}"
create_global = "#{global_name} = TkVariable.new ''"
Module.module_eval create_global
assign_value = "#{global_name}.value = '#{inf}'"
Module.module_eval assign_value
connect_variable = "cb.variable #{global_name}"
Module.module_eval connect_variable
check_buttons.push cb
end
p Kernel.global_variables.select {|e| e.id2name.start_with? '$var'}
p info.length.times.map {|i| Module.module_eval "$var#{i}.value"}
p check_buttons.map {|e| (e.cget :variable).value}
Tk.mainloop
程序产生以下输出:
[:$var0, :$var1, :$var2, :$var3, :$var4]
["orange", "apple", "banana", "grape", "watermelon"]
["orange", "apple", "banana", "grape", "watermelon"]
或者您可以使用更通用的方法,Kernel#eval相反。
因此,如果动态创建全局变量确实是您想要做的,那么它是可用的。
Checkbutton方法cget
的Tcl文档可以看here .
我在 Windows 7 上使用 Ruby 2.2.5 对此进行了测试。
关于ruby - ruby 有 global_variable_set 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38671827/
如果要用 Ruby 制作一个 Tk GUI 并制作多个具有不同全局变量名称的复选框。最有效的方法是什么? 我找到了 instance_variable_set,但这不适合我的场景。 我想知道是否有像
我是一名优秀的程序员,十分优秀!