使用Ruby Tk,我想在嵌套循环中创建多组单选按钮:设备的外部循环(Foo,Bar,Baz),以及每个设备上的操作的内部循环(Start,Stop,Pause) ,Nuke)。
当前代码:
require 'tk'
device_names = %w/Foo Bar Baz/
action_names = %w/Start Pause Stop Nuke/
button_variables = Array.new(device_names.size)
root = TkRoot.new
foo = bar = nil
device_names.each_with_index do |device_name, i|
TkLabel.new(root) do
text device_name
pack {}
end
action_names.each_with_index do |action_name, j|
TkRadiobutton.new(root) do
text action_name
value j
variable button_variables[i]
pack {}
end
end
end
Tk.mainloop
这会产生12个单反相机,但是当我点击4个暂停按钮中的任何一个时,例如,所有4个暂停按钮都被设置。
代码的其他变体产生12个radiobutton,但全部为一组;即,在任何给定时间只设置12个中的一个。
需要将这些组合成3组4个无线电按钮?
(这段代码是从一个更大的应用程序中减少的,这就是为什么它在语义上没有多大意义。)
答案 0 :(得分:0)
作为variable
传递的值是全局变量的名称。
外部循环需要通过instance_variable_set
动态定义实例变量:
此代码有效:
require 'tk'
device_names = %w/Foo Bar Baz/
action_names = %w/Start Pause Stop Nuke/
root = TkRoot.new
device_names.each do |device_name|
TkLabel.new(root) do
text device_name
pack {}
end
instance_variable_set("@#{device_name}", nil)
action_names.each do |action_name|
TkRadiobutton.new(root) do
text action_name
value action_name
variable device_name
pack {}
end
end
end
Tk.mainloop