PyGTKでタブ(ノートブック)に「閉じる」ボタンを付ける(前半)
GTK+のGUI部品にノートブックというものがあり、タブを用いて同じ領域に複数のGUI部品を入れて表示を切り替えるようにできる。
用途によっては単純にGUI部品を中に入れてそのラベル文字列を指定するだけでよいが、テキストエディタやWebブラウザなどで各タブをそれぞれのファイルやページに割り当てるという使い方をするときには、それを閉じるためのボタンをそれぞれのタブの右端に付けたい場合がある。
ここではノートブックへのGUI部品の追加から「閉じる」ボタンの処理までを扱う。
ノートブックへのページの追加
ノートブックはgtk.Notebookオブジェクトとして用いる。これは一種の入れ物なので、gtk.Containerクラスを継承しており、そのメンバ関数を用いることもできる。
ページの追加は以下のメンバ関数によって行う。
- append_page(): 末尾に追加
- prepend_page(): 先頭に追加
- insert_page(): position引数で位置指定可
最初の引数には中に入れるGUI部品(各ページの全体となるGUI部品)を指定するが、テキストビューだけをタブに含める場合ではその親として(スクロール可能にするために)用いるgtk.ScrolledWindowオブジェクトを入れることになるが、他の使い方ではgtk.Table(テーブルのセルによるレイアウト),gtk.HBox(横に並べる),gtk.VBox(縦に並べる)といったオブジェクトを入れたりすることもできる。「端末の256色パレットをGUI上で確認できるツールを更新(ボタンを改善・クリップボードに色の情報を記憶)」で作成したツールの中ではgtk.Tableクラスを継承したものを各ページとして用いている。
ラベル文字列とラベルウィジェット
タブ部分に表示する文字列はset_tab_label_text()というメンバ関数に変更対象ページのGUI部品(先ほどappend_page()などで入れたもの)とそのラベル文字列を引数にして呼ぶことで変更でき、「端末の256色パレットをGUI上で確認できるツールを更新(ボタンを改善・クリップボードに色の情報を記憶)」で作成したツールの中でも用いている。
一方、このラベルはテキストだけでなくGUI部品の形をとることもできるようになっており、先述のページ追加のメンバ関数でtab_label引数を用いるか別途メンバ関数set_tab_label()へ対象ページのGUI部品を指定して呼ぶことで、そのGUI部品をタブのラベルとすることができる。これをうまく利用することにより、タブにアイコンを付けたり「閉じる」ボタンを配置したりすることができる。
タブのラベルウィジェットの中身
今回はラベル文字列の右に「閉じる」ボタンを付けるだけとする。この場合のラベルウィジェットは横方向にGUI部品を並べるgtk.HBoxオブジェクトとなる。このオブジェクトのメンバ関数pack_start()でラベル文字列(gtk.Labelオブジェクト)とボタン(gtk.Buttonオブジェクト)を入れていく。
「閉じる」ボタンの作成
新しく作成したgtk.ButtonオブジェクトのGObjectプロパティimageの値を
gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU)
にすることで、小さな「閉じる」の画像(ストック・アイコン)のみを含んだボタンが作成できる。GObjectプロパティimageへの代入の代わりにメンバ関数set_image()を用いることもできる。
(「PyGTKでタブ(ノートブック)に「閉じる」ボタンを付ける(後半)」に続く)
関連記事:
- PyGObject/PyGTKにおけるGObjectプロパティの操作について
- 端末の256色パレットをGUI上で確認できるツールを更新(ボタンを改善・クリップボードに色の情報を記憶)
- PyGTKでタブ(ノートブック)に「閉じる」ボタンを付ける(後半)
関連URL:
- PyGTK リファレンス: gtk.Notebook
- PyGTK リファレンス: gtk.Container
- PyGTK リファレンス: gtk.ScrolledWindow
- PyGTK リファレンス: gtk.Table
- PyGTK リファレンス: gtk.HBox
- PyGTK リファレンス: gtk.VBox
- PyGTK リファレンス: gtk.Label
- PyGTK リファレンス: gtk.Button
使用したバージョン:
- Python 2.6.4
- PyGTK 2.16.0