Ruby:Green_shoes,将list_box选择分配给变量

时间:2014-08-27 17:14:22

标签: ruby variables user-interface shoes

我正在使用Ruby / green_shoes来创建一个gui应用程序。 我希望用户能够选择一个COM端口,然后按一个按钮来运行该脚本。

它已接近完成,但我似乎无法使用突出显示的com端口并将其分配给变量'port',以便在按下按钮时将其传递给我的脚本。

para "Select your COM port: "
list_box items: ["COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "COM10"], width: 120
@push = button "Begin Patching Process"
@push.click {
serial = SerialPort.new("#{port}", 9600)
serial.read_timeout = 200
serial.write("\x50\xBB\xFF\x01\x25\x98\x4D") #contains initialization to program
serial.readlines
serial.write("\x02") #requests firmware version
serial.readlines
serial.write("\x06")
serial.readlines
serial.write("\x58\x1f\xc0\x10\x00\x00\x00\x02\x02\x02\x01\x00\x00\x00\x01\x01\x34\x01\x80\x00") #contains VHF freqs (\x01\x34\x01\x80)
serial.readlines
serial.write("\x06\x58\x1f\xd0\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x04\x00\x05\x20\x00") #contains UHF freqs (x01\x04\x00\x05\x20)
serial.readlines
serial.write("\x06\x58\x1e\xe0\x10\x20\x20\x56\x46\x4f\x20\x20\x55\x4e\x4c\x4f\x43\x4b\x20\x00\x00") #contains pwr on msg (ASCII)
}
end

当然,在此之后会有更多代码包含按下按钮时要执行的操作。

我只需要拥有它,以便当我选择COM7时......变量'port'等于列表中选定的com端口。

由于已接受的答案@ 7stud

,以下工作修订
Shoes.app title: "BFB-251 VFO Patcher", width: 420, height: 120 do
background gray
@note = para "This Patcher is for use ONLY with Firmware BFB251"
#@note = para "This software does NOT confirm your model at this time."
#@note = para "Hold down the 3 key while powering on the unit to confirm it's version"
@note = para "I take no responsibility for any damanges or misuse."
para "Select your COM port: "

@my_list_box = list_box(
items: ["COM1", "COM2", "COM3", "COM7"], 
width: 120,) 
button "Begin Patching Process" do
port = @my_list_box.text
serial = SerialPort.new("#{port}", 9600)
serial.read_timeout = 200
serial.write("\x50\xBB\xFF\x01\x25\x98\x4D") #contains initialization to program
serial.readlines
serial.write("\x02") #requests firmware version
serial.readlines
serial.write("\x06")
serial.readlines
serial.write("\x58\x1f\xc0\x10\x00\x00\x00\x02\x02\x02\x01\x00\x00\x00\x01\x01\x34\x01\x80\x00") #contains VHF freqs (\x01\x34\x01\x80)
serial.readlines
serial.write("\x06\x58\x1f\xd0\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x04\x00\x05\x20\x00") #contains UHF freqs (x01\x04\x00\x05\x20)
serial.readlines
serial.write("\x06\x58\x1e\xe0\x10\x20\x20\x56\x46\x4f\x20\x20\x55\x4e\x4c\x4f\x43\x4b\x20\x00\x00") #contains pwr on msg (ASCII)
end
end

1 个答案:

答案 0 :(得分:1)

未经测试,因为Green Shoes安装在Mac OSX 10.6.8上导致错误:

Shoes.app do

  para "Select your COM port: "
  @current_selection = para "No port selected" 

  my_list_box = list_box(
    items: ["COM1", "COM2", "COM3"], 
    width: 120,
  )

  my_list_box.change do |list_box|
    choice = list_box.text
    @current_selection.text = choice
    @port = choice
  end

end

当然,您可以取消@current_selection para,然后执行@port = list_box.text

您还可以在list_box()方法调用之后直接指定更改块:

Shoes.app do

  para "Select your COM port: "
  @current_selection = para "No port selected" 

  list_box(
    items: ["COM1", "COM2", "COM3"], 
    width: 120,
  ) do |my_list_box|
    choice = my_list_box.text
    @current_selection.text = choice
    @port = choice
  end

end

对评论的回应:

听起来你想做这样的事情:

Shoes.app do

  para "Select your COM port: "

  @my_list_box = list_box(
    items: ["COM1", "COM2", "COM3"], 
    width: 120,
  ) 

  button "Begin Patching Process" do
    port = @my_list_box.text
    #Do stuff with port here...
  end

end

根据Green Shoes文档,@ variables在您的应用程序的整个块中都可用,因此您只需将调用list_box()的结果分配给@variable。