ウィンドウを含むいくつかのウィジェットは,1つのウィジェットを収納することができる.このように他のウィジェットを収納できるウィジェットをコンテナ,この収納のことをパッキングという.前ページのサンプルコードではウィンドウウィジェットのみ紹介したが,本ページではもう一種類ウィジェットを紹介し,その具体的な方法を説明する.
ラベル
前ページのサンプルで紹介したウィンドウに,文字列を表示するラベルウィジェットを収納すると,次のような画面になる(ちなみにラベルはコンテナではない).

#!/usr/bin/ruby
require 'gtk2'
win = Gtk::Window.new()
win.signal_connect("destroy") do
Gtk.main_quit()
end
lbl = Gtk::Label.new() # ラベルのウィジェットを生成
lbl.set_text("label") # 文字列"label"をセット
win.add(lbl) # ウィンドウにラベルをパッキング
win.show()
lbl.show() # ラベルを表示
Gtk.main()
ラベルウィジェットのコンストラクタは,文字列を引数とすることでそれをセットしたラベルウィジェットを生成する.それゆえ,前述のコードの9行目と10行目は,以下の1文にまとめられる.
lbl = Gtk::Label.new("label")
また,前ページで述べた通り,ウィジェットは標準では非表示設定になっている.そして,コンテナが非表示である場合,収納されたウィジェットが表示されていても画面に反映されない.これは再帰的に適用され,収納されたウィジェットがコンテナである場合は,それに収納されたウィジェットが表示されていても画面に反映されない.そこで,サンプルコードでは12行目と13行目で各ウィジェットの表示のための処理を行なっている.
今回の場合,全てのウィジェットはウィンドウ(win)を基底のコンテナとして木構造で繋がっている.このような場合は次の1行にまとめることができる.
win.show_all()
この関数はウィジェットとそれに収納されたウィジェットを再帰的に全て表示する.
前述のサンプルに紹介した2つの修正を施したコードが次の通りである.
#!/usr/bin/ruby
require 'gtk2'
win = Gtk::Window.new()
win.signal_connect("destroy") do
Gtk.main_quit()
end
lbl = Gtk::Label.new("label") # ラベルのウィジェットを生成
win.add(lbl) # ウィンドウにラベルをパッキング
win.show_all()
Gtk.main()
ウィジェットの表示と隠蔽
ウィジェットの表示状態と非表示(隠蔽)状態の切り替えには,次の関数を使用する.
表示 | 隠蔽 | |
---|---|---|
1つ | Gtk::Widget.show() | Gtk::Widget.hide() |
再帰的に全て | Gtk::Widget.show_all() | Gtk::Widget.hide_all() |
コンテナのパッキングとアンパッキング
コンテナのパッキングとアンパッキングには次のような関数を使用する.
パッキング | アンパッキング |
---|---|
Gtk::Container.add( Gtk::Widget ) | Gtk::Container.remove( Gtk::Widget ) |