hakeの日記

Windows環境でプログラミングの勉強をしています。

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

参考サイト