Menampilkan data atau informasi dengan perumpamaan struktur pohon saat ini sangat digemari. PyGTK mempunyai widget yang mendukung hal ini, yaitu gtk.TreeView . Aplikasi dengan menu yang kompleks menjadi lebih mudah digunakan dengan bantuan gtk.TreeView. Jika kita mempunyai banyak data yang ditampilkan namun kita hanya perlu melihat bagian yang penting saja, gunakanlah gtk.TreeView.
Berbeda dengan widget-widget yang lain, untuk menampilkan gtk.TreeView ini memerlukan banyak object dan widget pendukung. Dengan pendekatan pola (pattern) MVC, Model/View/Control , hal yang tampaknya rumit ini menjadi hal yang sederhana dan fleksibel.
Model adalah struktur data untuk menyimpan data/informasi yang akan ditampilkan. View adalah object/widget yang menampilkan data/informasi. Sedangkan control adalah kode program yang kita tulis dalam membuat model dan view.
PyGTK mempunyai kelas gtk.TreeModel sebagai kelas dasar dari model yang kita gunakan. Kelas ini tidak digunakan langsung namun sebagai antar-muka (interface) dari object model dan view. Akan sangat membantu jika Anda membaca dokumen referensi dari gtk.TreeModel.
Untuk mempermudah hidup kita GTK telah menyiapkan model yang siap pakai. Terdapat dua model yaitu gtk.TreeStore dan gtk.ListStore. Jika kita memerlukan struktur data secara hirarki maka dapat kita gunakan gtk.TreeStore. Namun jika strukturnya berupa daftar maka gunakan gtk.ListStore. Selanjutnya kita hanya memasukkan data ke dalam struktur ini.
Kita mulai dengan struktur yang lebih sederhana dahulu. Sangat mudah untuk membuat object gtk.ListStore ini.
gtk.ListStore(tipe_kolom,...)
| tipe_kolom,... | daftar tipe data untuk setiap kolom. |
| kembalian | object model. |
Kita dapat melihat model sebagai tabel. Model terdiri dari baris dan kolom. Setiap kali kita membuat model kita perlu daftarkan tipe data untuk setiap kolomnya. Contoh :
mymodel = gtk.ListStore(gobject.TYPE_INT, gobject.TYPE_STRING, gtk.gdk.TYPE_PIXBUF)
Membuat model dengan tiga kolom. Kolom pertama mempunyai tipe gobject.TYPE_INT, kolom kedua gobject.TYPE_STRING dan kolom ketiga gtk.gdk.TYPE_PIXBUF . Tipe data lain yang dapat digunakan :
gobject.TYPE_BOOLEAN
gobject.TYPE_BOXED
gobject.TYPE_CHAR
gobject.TYPE_DOUBLE
gobject.TYPE_ENUM
gobject.TYPE_FLAGS
gobject.TYPE_FLOAT
gobject.TYPE_INT
gobject.TYPE_INT64
gobject.TYPE_INTERFACE
gobject.TYPE_INVALID
gobject.TYPE_LONG
gobject.TYPE_NONE
gobject.TYPE_OBJECT
gobject.TYPE_PARAM
gobject.TYPE_POINTER
gobject.TYPE_PYOBJECT
gobject.TYPE_STRING
gobject.TYPE_UCHAR
gobject.TYPE_UINT
gobject.TYPE_UINT64
gobject.TYPE_ULONG
Selain setiap kolom dapat menggunakan tipe data GObject manapun, juga dapat menggunakan tipe data dari PyGTK atau tipe data yang diturunkan dari GObject.
Karena fungsi dari model adalah menyimpan data maka kebanyakan method-method dari gtk.ListStore adalah cara-cara memasukkan data ke dalam model. Sangat dianjurkan untuk membaca dokumen referensi dari gtk.ListStore.
Model gtk.TreeStore sangat mirip dengan gtk.ListStore . Perbedaannya, kita dapat membuat baris baru sebagai anak baris (child node) pada gtk.TreeStore sehingga membentuk struktur hirarkis.
Untuk dapat mengambil kembali data yang telah disimpan di dalam model diperlukan suatu cara tertentu. Mirip dengan indeks di array, model mempunyai istilah path. Path adalah petunjuk ke baris tertentu di dalam model (baris juga disebut node). Path dapat ditulis dalam dua bentuk. Pertama, path dapat dalam bentuk array/tuple dari bilangan bulat tak bertanda (unsigned integer). Kedua, dapat pula dalam bentuk string dari beberapa bilangan dengan titik dua sebagai pemisah. Sebagai contoh : "0" adalah akar dari model atau baris pertama (nomor dimulai dari 0), "2:4" adalah anak baris ke-lima dari baris ke-tiga.
Perlu diperhatikan bahwa path hanya sebagai petunjuk yang mirip dengan alamat rumah. Suatu alamat belum tentu menunjukkan bahwa rumah itu ada. Namun sebuah object iterator adalah object yang mereferensikan baris yang ada di dalam model. Iterator bisa dilihat sebagai pointer ke baris tertentu di dalam model. Dalam model kita, iterator ini disebut treeiter. Konversi dari path ke treeiter didapat dari fungsi get_iter(path), atau sebaliknya get_path(treeiter).
Kebanyakan fungsi-fungsi lain dari model menggunakan treeiter sebagai argumen atau nilai kembalinya.
Sebagai contoh cuplikan program :
# membuat model
model = gtk.TreeStore(gobject.TYPE_STRING,gobject.TYPE_STRING,gobject.TYPE_STRING)
# mengisi model dengan data
iter = model.append(None, None) # iterator baris baru
model.set_value(iter, 0, "Lingkin Park") # isi kolom pertama
model.set_value(iter, 1, "Hybrid Theory") # isi kolom kedua
model.set_value(iter, 2, "Mobil") # isi kolom ketiga
# menambah baris baru sebagai anak dari baris di atas
citer = model.append(iter, None)
# isi datanya dengan fungsi set(iterator, ....)
# .... adalah pasangan kolom dengan data, mis kolom 1 berisi data "Meteora"
model.set(citer, 0, None, 1, "Meteora", 2, "Rumah")