2014-08-27 7 views
1

Я использую Ruby/green_shoes для создания приложения gui. Я хочу, чтобы пользователь мог выбрать COM-порт, а затем нажать кнопку, чтобы запустить скрипт.Ruby: Green_shoes, присваивание list_box переменной

Это почти сделано, но я не могу взять выделенный COM-порт и назначить его переменной «порт», чтобы он мог быть передан моему сценарию, когда я нажимаю кнопку.

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 
+0

Пройдитесь по своим переменным @note; они ничего не делают. Кроме того, вам нужно выяснить, как отступать от кода. Любой текстовый редактор программирования автоматически сделает это за вас. Не используйте обычный текстовый редактор. – 7stud

ответ

1

Непроверен потому что установка Зеленый обуви вызвала ошибку на 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.

+0

Все еще работает в тех же проблемах, однако я думаю, что это просто синтаксис, вероятно, в том, как я его реализую. Я вернусь позже, чтобы повторить попытку и сообщить вам, как это получается. Это так близко. Спасибо btw, вы были очень полезны здесь и в прошлых вопросах, которые у меня были. – Corrosive

+0

@Corrosive, Когда вы говорите ** «порт», чтобы его можно было передать в мой скрипт **, является ли ваш сценарий отдельной программой из вашего приложения «Обувь»? – 7stud

+0

Нет, все в одном. Вот несколько строк после нажатия кнопки (нажатие содержит символ AT, но сайту это не понравилось) push = кнопка «Начать процесс исправления» push.click { \t serial = SerialPort.new ("# {port }», 9600) \t serial.read_timeout = 200 \t serial.write ("\ x50 \ Xbb \ XFF \ x01 \ x25 \ x98 \ X4D") \t} конец – Corrosive