PyGTKでツリービューにリストのデータ(ListStore)を表示(簡単な例)
「PyGTKでツリービューにリストのデータ(ListStore)を表示(概要とメモ)」の続き。
簡単な例
下の例では学級生徒一覧のようなものを表示する。データはタプルのリストとして用意しておいたものをリストモデル(ListStore)に流し込んでいるだけで、操作はできない。セルレンダラもテキストを表示するタイプのものをそのまま(特に設定をせずに)使用している。
なお、この中で使用した名前は架空のものであり、実在の個人名や団体名などと一致するものがあったとしても関係はない。
[任意]ファイル名: treeviewliststoretest.py
#! /usr/bin/python # -*- encoding: utf-8 -*- import sys try: import pygtk pygtk.require('2.0') except: pass try: import gtk except: print >> sys.stderr, 'Error: PyGTK is not installed' sys.exit(1) class TreeViewWithColumn(gtk.TreeView): """ コラムを含んだツリービュー """ # コラム内の項目番号(連番)をrange()で作成する ( COLUMN_NUM, COLUMN_FAMILY, COLUMN_GIVEN, ) = range(3) # 実際の値は上から順に0,1,2が入る def __init__(self, *args, **kwargs): gtk.TreeView.__init__(self, *args, **kwargs) # 必須 # コラムの設定 # ListStore/TreeStore上の項目とTreeView上に表示する項目・その位置とを # 関連付ける(コラム自体の設定としてのデータを持つこともできる) # 今回はセルレンダラはgtk.CellRendererTextを生成と同時に渡している # また、設定も表示するテキストを「text=」で指定しているだけ self.col_num = gtk.TreeViewColumn('No.', gtk.CellRendererText(), text=self.COLUMN_NUM) self.col_family = gtk.TreeViewColumn('Family name', gtk.CellRendererText(), text=self.COLUMN_FAMILY) self.col_given = gtk.TreeViewColumn('Given name', gtk.CellRendererText(), text=self.COLUMN_GIVEN) # コラムを追加 self.append_column(self.col_num) self.append_column(self.col_family) self.append_column(self.col_given) class MainWindow(gtk.Window): """ メインウィンドウ """ # 直接ウィンドウとは関係ないが、データは便宜上ここに用意しておくことにする data = \ [ (1, 'Tanaka', 'Ichiro'), (2, 'Yamana', 'Hanako'), (3, 'Urashima', 'Saburo'), (4, 'Kurusu', 'Santa'), (5, 'Handa', 'Fuuta'), (6, 'Umeno', 'Tsubomi'), (7, 'Yoshi', 'Yaruzo'), (8, 'Kawai', 'Nuko'), (9, 'Hoshi', 'Kintaro'), (10, 'Shirayuki', 'Himeko'), (11, 'Ashigaka', 'Yui'), (12, 'Ageyanagi', 'Masako'), (13, 'Torino', 'Kenta'), (14, 'Kubota', 'Mochio'), (15, 'Kuroi', 'Sora'), (16, 'Hirai', 'Shin'), (17, 'Akai', 'Midori'), (18, 'Nakano', 'Anko'), (19, 'Imai', 'Takeo'), (20, 'Kouno', 'Torio'), (21, 'Yoshino', 'Yasu'), (22, 'Komatsu', 'Taro'), (23, 'Kondo', 'Musashi'), (24, 'Ono', 'Ken'), (25, 'Mochida', 'Usuichi'), (26, 'Mochida', 'Kineko'), (27, 'Honma', 'Kayo'), (28, 'Matsuno', 'Sarunosuke'), (29, 'Nishi', 'Minami'), (30, 'Usui', 'Hikaru'), (31, 'Sato', 'Toshio'), (32, 'Doi', 'Tsubasa'), (33, 'Ishimaru', 'Denko'), (34, 'Usami', 'Mimi'), (35, 'Hattori', 'Shinobu'), (36, 'Kago', 'Yuri'), (37, 'Takeda', 'Ingen'), (38, 'Kai', 'Dankichi'), (39, 'Okusa', 'Ben'), (40, 'Hara', 'Tatsuo'), (41, 'Mizuno', 'Shizuku'), (42, 'Baba', 'Nana'), ] def __init__(self, *args, **kwargs): gtk.Window.__init__(self, *args, **kwargs) # ショートカットキー(アクセラレータ) self.accelgroup = gtk.AccelGroup() self.add_accel_group(self.accelgroup) # メニュー項目 self.item_quit = gtk.ImageMenuItem(gtk.STOCK_QUIT, self.accelgroup) self.menu_file = gtk.Menu() self.menu_file.add(self.item_quit) self.item_file = gtk.MenuItem('_File') self.item_file.set_submenu(self.menu_file) self.menubar = gtk.MenuBar() self.menubar.append(self.item_file) # ツリービュー # model(ListStore)はツリービューに連動させるリストデータ # 初期化時に型を項目ごとに指定する # 使用できる型は下のURLを参照・GObjectの各形式も使用可能 # http://www.pygtk.org/pygtk2tutorial/sec-TreeModelInterface.html#sec-CreatingTreeStoreAndListStore # 今回は「[整数] + [文字列1] + [文字列2]」の形 # データとの結び付けは初期化時もしくはset_model()で行う self.treeview = TreeViewWithColumn(model=gtk.ListStore(int, str, str)) self.treeview.set_rules_hint(True) # 背景色のシマシマを付ける # ツリービュー向けスクロールウィンドウ self.sw = gtk.ScrolledWindow() self.sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.sw.add(self.treeview) # 子にツリービューを指定してスクロール可能にする # レイアウト用コンテナ self.vbox = gtk.VBox() self.vbox.pack_start(self.menubar, expand=False, fill=False) self.vbox.pack_start(self.sw) # シグナル self.connect('delete_event', gtk.main_quit) self.item_quit.connect('activate', gtk.main_quit) # データ追加 for rec in self.data: # 結び付けられたモデル(gtk.ListStore)のメンバ関数append()に*タプル*を渡す self.treeview.get_model().append(rec) # ウィンドウ self.add(self.vbox) self.set_size_request(300, 300) class PyGTKTreeViewListStoreTest: """ リストを用いたツリービューのテスト """ def main(self): """ アプリケーションのメイン処理 """ win = MainWindow() win.show_all() gtk.main() if __name__ == '__main__': app = PyGTKTreeViewListStoreTest() app.main()
関連記事:
- PyGTKでツリービューにリストのデータ(ListStore)を表示(概要とメモ)
- PyGTKでツリービューにリストのデータ(ListStore)を表示(データを変更可能にする・メモ)
- PyGTKでツリービューにリストのデータ(ListStore)を表示(データを変更可能にする・コード例)
- PyGTKでツリービューに階層を持ったデータ(TreeStore)を表示
- PyGTKでツリービューにリストのデータ(ListStore)を表示(項目をGUI上で追加/削除、データの並べ替えや入れ替えなど)
- PyGTKでツリービューにリストのデータ(ListStore)を表示(モデルの内容を取り出す)
- PyGTKでツリービューにリストのデータ(ListStore)を表示(ボタンからデータの順番を入れ替える・メモ)
- PyGTKでツリービューにリストのデータ(ListStore)を表示(ボタンからデータの順番を入れ替える・コード例)
- PyGTKでツリービューの各テキストセルに対してスタイルを適用する(前半)
- PyGTKでツリービューの各テキストセルに対してスタイルを適用する(後半)