Ruby/TkのComboBox
Ruby/Tkでは標準で?ComboBox(プルダウンメニュー)が無いようですね。拡張ライブラリを覗くと3種類のComboBoxがありましたが、Rumix2の環境では前者2つは別途ライブラリをインストールしないと動作しないようです。
/tkextlib/bwidget/combobox.rb /tkextlib/iwidgets/combobox.rb /tkextlib/tile/tcombobox.rb
というわけでTileライブラリ?のComboBoxを使用します。クラスの呼び出しは
Tk::Tile::TCombobox.new TkCombobox.new
の様にするようです。下の呼び出し方は/tk/ttk_selector.rbの中でalias定義がされていました。
あと、選択が変更された場合のイベントの記述方法がわからなかったのですが、選択された文字列を格納する変数のTkVariable#traceを使用し変数が書き換わった情報を利用すれば何とかなりそうです(初期設定時や、同じ項目を選択し直してもイベントが発生してまいますが)
# coding:Windows-31J require 'tk' #require 'tkextlib/tile' # ComboBoxが変更された場合に呼ばれる def combo_sel_changed puts $var.value end $var = TkVariable.new # $varの変更時にcombo_sel_changedを実行 $var.trace("w", proc{ combo_sel_changed }) TkLabel.new(nil, text:'COMBOBOX1').pack(side: :top, fill: :both, expand:true) list = %w(zero one two three four five) #cb1 = Tk::Tile::TCombobox.new(nil, values: list, textvariable: $var) cb1 = TkCombobox.new(nil, values: list, textvariable: $var) cb1.pack(side: :top, fill: :both, expand:true) cb1.ttk_state(:readonly) cb1.current = 3 Tk.mainloop