2014-08-27 93 views
1

我使用Ruby/green_shoes創建gui應用程序。 我希望用戶能夠選擇一個COM端口,然後按下按鈕來運行腳本。Ruby:Green_shoes,將list_box選擇分配給變量

差不多完成了,但是我似乎無法將突出顯示的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例如....變量'端口'等於從列表中選擇的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 2014-08-28 04:09:32

回答

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段,只是做@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 2014-08-27 19:01:46

+0

@腐蝕,當你說**'端口',以便它可以傳遞給我的腳本**,你的腳本是從你的鞋子應用程序單獨的程序? – 7stud 2014-08-27 19:25:19

+0

不,這一切都在一個。這裏是按下按鈕後的幾行(推送包含AT符號但網站不喜歡) push = button「Begin Patching Process」 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 2014-08-27 19:39:35