あなたの目標が何であるかは明らかではありません。@mobility をどこかに表示するには?@mobility 変数に値を代入するだけでは何も起こりません。
Shoes.app do
@choice_map = {
"1- Ad lib" => 11,
"2- Assist of SB" => 22,
"3- Assist of 1" => 33,
"4- Assist of 2" => 44
}
para "Choose item:"
@my_listbox = list_box(:items => @choice_map.keys)
button 'Compute' do
@mobility = @choice_map[@my_listbox.text]
end
end
@mobility に正しい値が含まれていることを証明するには、値をどこかに表示する必要があります。
Shoes.app do
@choice_map = {
"1- Ad lib" => 11,
"2- Assist of SB" => 22,
"3- Assist of 1" => 33,
"4- Assist of 2" => 44
}
@my_listbox = list_box(items: @choice_map.keys)
@my_para = para 'show computed results here'
button 'Compute' do
@mobility = @choice_map[@my_listbox.text]
@my_para.text = @mobility
end
end
あなたのコードは実際にはマイナーな変更でうまく動作します:
Shoes.app :title => 'Procedural', :width => 300, :height => 200 do
@list_box = list_box :items => ["1- Ad lib", "2- Assist of SB", "3- Assist of 1", "4- Assist of 2"]
@my_para = para 'show computed results here'
button 'Compute' do
@acuity = @list_box.text #<---CHANGE HERE
if @acuity == "1- Ad lib"
@mobility = 11
elsif @acuity == "2- Assist of SB"
@mobility = 22
elsif @acuity == "3- Assist of 1"
@mobility = 33
elsif @acuity == "4- Assist of 2"
@mobility = 44
end
@my_para.text = @mobility
end
ボタンが不要な場合:
Shoes.app do
@choice_map = {
"1- Ad lib" => 11,
"2- Assist of SB" => 22,
"3- Assist of 1" => 33,
"4- Assist of 2" => 44
}
para "Choose item:"
@default = "2- Assist of SB"
@mobility = @choice_map[@default]
@my_listbox = list_box(items: @choice_map.keys, choose: @default) do |list|
@mobility = @choice_map[list.text]
end
end
list_box() に指定されたブロックは onchange でのみ実行されるため、@mobility の初期値を設定する必要があります。
次のようなものがリストボックスの初期値を取得できると思うでしょう:
Shoes.app do
@choice_map = {
"1- Ad lib" => 11,
"2- Assist of SB" => 22,
"3- Assist of 1" => 33,
"4- Assist of 2" => 44
}
para "Choose item:"
@my_listbox = list_box(items: @choice_map.keys) do |list|
@mobility = @choice_map[list.text]
@my_para.text = @mobility
end
@mobility = @choice_map[@my_listbox.text]
@my_para = para @mobility
end
しかし、アプリ ブロックの実行が終了するまでリストボックスは存在しないようです。そのため、アプリ ブロック内の @my_listbox.text を取得することはできません。