前ページで述べた通り,別のウィジェットを収納可能なウィジェットをコンテナという.本ページではコンテナについてもっと詳しく説明する.
コンテナは大きく2種類に分類できる.
- 1つのウィジェットを収納可能
- 複数のウィジェットを収納可能
- パッキングボックス(Gtk::Boxを継承したクラス)
- Gtk::VBox
- Gtk::HBox
- Gtk::Table
パッキングボックス
パッキングボックスとはGtk::Boxを継承したクラスらのこと.パッキングボックスには次の2つがある.
クラス | Gtk::HBox | Gtk::VBox |
---|---|---|
コンテナ | 横方向にパッキングしていくコンテナ | 縦方向にパッキングしていくコンテナ |
コード |
|
|
実行画面 |
パッキングボックスのコンストラクタは,第1引数で子ウィジェットのサイズを均一にするかを,第2引数で子ウィジェット間の隙間の長さ(ピクセル)を指定する.
複数のウィジェットを収納可能なコンテナは,複雑なレイアウトに対応したパッキング関数を持つ.pack_start関数はその中の一つであり,Gtk::VBoxは下に,Gtk::HBoxは右に指定したウィジェットを追加する.このようなコンテナのパッキング関数の詳細は,後で詳しく説明する.
テーブル
テーブルは行と列を持つ,複数のウィジェットを収納可能なコンテナである.テーブルのパッキング関数は,行の開始位置と終了位置,列の開始位置と終了位置を指定してウィジェットを収納する.例えば列数が4と行数が3のテーブルは,次のような番号で位置を指す.
#!/usr/bin/ruby
require 'gtk2'
win = Gtk::Window.new()
tbl = Gtk::Table.new(4, 3,true) # 列4✕行3のテーブル.
lbl1 = Gtk::Label.new("hoge")
lbl2 = Gtk::Label.new("fuga")
lbl3 = Gtk::Label.new("piyo")
tbl.attach_defaults(lbl1, 0, 1, 0, 3)
tbl.attach_defaults(lbl2, 1, 4, 0, 1 )
tbl.attach_defaults(lbl3, 1, 4, 1, 3)
win.add(tbl)
win.show_all()
Gtk.main()
このプログラムの実行結果は次の通りである.
パッキング
複数のウィジェットを収納可能なコンテナには,add関数以外に複雑なレイアウトに対応するためのパッキング関数がある.各コンテナで使用するパッキングとアンパッキングには次のような関数がある.
ウィジェット | パッキング | アンパッキング | |
---|---|---|---|
1つのウィジェットを収納可能 | Gtk::Container.add | Gtk::Container.remove | |
複数のウィジェットを収納可能 |
|
|
|
Gtk::Table |
|
- Gtk::Box.pack_start(child_widget, expand=true, fill=true, padding=0)
- Gtk::Box.pack_end(child_widget, expand=true, fill=true, padding=0)
-
ウィジェット(child_widget)を決められた位置に収納.パッキングボックス(Gtk::Box)では,Gtk::Boxのpack_startとpack_end,そしてGtk::Containerのaddで配置する位置が異なる(後述の理由によりaddはpack_startと同じである).各関数は,ウィジェットを端の方に配置していく.配置位置は次の表で書かれた端である.
関数 VBox HBox pack_start 下 右 add 下 右 pack_end 上 左 - expand
- trueの場合,子ウィジェットの大きさが拡大可能な時拡大する.
- fill
- expandの値とこの変数がtrueの場合,かつ内側のウィジェットに隙間があれば,そこを埋めるように拡大する.
- padding
- 追加するウィジェットと,内側のウィジェットとの間の隙間を設定.
- Gtk::Table.attach(child, left, right, top, bottom, xopt=Gtk::EXPAND|Gtk::FILL, yopt=Gtk::EXPAND|Gtk::FILL, xpad=0, ypad=0)
- Gtk::Table.attach_defaults(child, left, right, top, bottom)
-
指定したウィジェットを(child)をテーブルに収納する.ウィジェットは,X軸のleftからright,Y軸のtopからbottomの位置に収納される.テーブルでもadd関数は使用可能だが,add関数では座標を指定できない.
- xopt
- yopt
- xoptはX軸の,yoptはY軸に関するウィジェットのサイズに関するオプション.オプションの型と定数は次の通りである.
GtkAttachOptions
- Gtk::EXPAND
- スペースを埋めるようにウィジェットを拡大しようとする.1<<0の値.
- Gtk::FILL
- ウィジェットのために用意された領域を埋めるよう拡大しようとする.1<<1の値.
- Gtk::SHRINK
- 可能であればウィジェットを縮小する.1<<2の値.
- xpad
- ypad
- xpadはX軸の,ypadはY軸のウィジェット間の隙間を指定.
- Gtk::Container.add(widget, child_perperties=nil)
add関数
複数のウィジェットを収納可能なコンテナでadd関数を呼んだ場合,1つのウィジェットを収納可能なコンテナ(Gtk::Binを継承したコンテナ)のadd関数とは異なる関数を呼び出す.Gtk::Boxの場合はpack_start関数,Gtk::Tableの場合はattach関数が呼び出される.この時使用される引数は,必ずしも正しいものとは限らない.
コンストラクタ
- Gtk::Box.new(homogeneous=false, spacing=0)
-
- homogeneous
- 子ウィジェットのサイズを均一にするか.
- spacing
- 子ウィジェット間の隙間の長さ.
- Gtk::Table.new(rows, columns, homogeneous=false)
- rows
- 列数
- columns
- 行数