PyGTK - Kelas TreeView
Widget Treeview menampilkan konten model yang mengimplementasikan antarmuka gtk.TreeModel. PyGTK menyediakan jenis model berikut -
- gtk.ListStore
- gtk.TreeStore
- gtk.TreeModelSort
ListStore adalah model daftar. Saat dikaitkan dengan widget gtk.TreeView, ini menghasilkan kotak Daftar yang berisi item yang akan dipilih. Objek gtk.ListStore dideklarasikan dengan sintaks berikut -
store = gtk.ListStore(column_type)
Sebuah daftar mungkin memiliki banyak kolom, konstanta tipe yang telah ditentukan sebelumnya adalah -
- gobject.TYPE_BOOLEAN
- gobject.TYPE_BOXED
- gobject.TYPE_CHAR
- gobject.TYPE_DOUBLE
- gobject.TYPE_ENUM
- gobject.TYPE_FLOAT
- gobject.TYPE_INT
- gobject.TYPE_LONG
- gobject.TYPE_NONE
- gobject.TYPE_OBJECT
- gobject.TYPE_STRING
- gobject.TYPE_UCHAR
- gobject.TYPE_UINT
- gobject.TYPE_ULONG
- gtk.gdk.pixbuf dll.
Misalnya, objek ListStore untuk menyimpan item string dideklarasikan sebagai -
store = gtk.ListStore(gobject.TYPE_STRING
Untuk menambahkan item di toko, metode append () digunakan -
store.append (["item 1"])
TreeStore adalah model untuk widget Pohon multi-kolom. Misalnya, pernyataan berikut membuat penyimpanan dengan satu kolom yang memiliki item string.
Store = gtk.TreeStore(gobject.TYPE_STRING)
Untuk menambahkan item di TreeStore, gunakan metode append (). Metode append () memiliki dua parameter, induk dan baris. Untuk menambahkan item tingkat atas, induknya adalah Tidak Ada.
row1 = store.append(None, ['row1'])
Anda perlu mengulangi pernyataan ini untuk menambahkan beberapa baris.
Untuk menambahkan baris anak, teruskan baris tingkat atas sebagai parameter induk ke metode append () -
childrow = store.append(row1, ['child1'])
Anda perlu mengulangi pernyataan ini untuk menambahkan beberapa baris anak.
Sekarang, buat widget TreeView dan gunakan objek TreeStore di atas sebagai model.
treeview = gtk.TreeView(store)
Sekarang kita harus membuat TreeViewColumn untuk menampilkan data penyimpanan. Objek gtk.TreeViewColumn mengelola header dan sel menggunakan gtk.CelRenderer. Objek TreeViewColumn dibuat menggunakan konstruktor berikut -
gtk.TreeViewColumn(title, cell_renderer,…)
Selain title dan renderer, dibutuhkan nol atau lebih pasangan atribut = kolom untuk menentukan dari kolom model pohon mana nilai atribut akan diambil. Parameter ini juga dapat diatur menggunakan metode kelas TreeViewColumn yang diberikan di bawah ini.
Sebuah gtk.CellRenderer adalah kelas dasar untuk sekumpulan objek untuk merender berbagai jenis data. Kelas turunannya adalah CellRendererText, CellRendererPixBuf dan CellRendererToggle.
Metode kelas TreeViewColumn berikut digunakan untuk mengonfigurasi objeknya -
TreeViewColumn.pack_start (sel, perluas = True) - Metode ini mengemas objek CellRenderer ke dalam kolom awal. Jika parameter perluasan diatur ke True, kolom seluruh ruang yang dialokasikan ditetapkan ke sel.
TreeViewColumn.add_attribute (sel, atribut, kolom) - Metode ini menambahkan pemetaan atribut ke daftar di kolom pohon. Itucolumn adalah kolom model pohon.
TreeViewColumn.set_attributes () - Metode ini menyetel lokasi atribut dari renderer menggunakan attribute = column pasangan
TreeViewColumn.set_visible () - Jika True, kolom tampilan pohon terlihat
TreeViewColumn.set_title () - Metode ini menyetel properti "title" ke nilai yang ditentukan.
TreeViewColumn.set_lickable () - Jika disetel ke True, header dapat mengambil fokus keyboard, dan diklik.
TreeViewColumn.set_alignment (xalign) - Metode ini menyetel properti "alignment" ke nilai xalign.
Sinyal "diklik" dipancarkan saat pengguna mengklik tombol tajuk kolom tampilan pohon .
Setelah mengonfigurasi objek TreeViewColumn, objek itu ditambahkan ke widget TreeView menggunakan metode append_column ().
Berikut ini adalah metode penting dari kelas TreeView -
TreevVew.set_model () - Ini menyetel properti "model" untuk tampilan pohon. Jika treeview sudah memiliki set model, metode ini akan menghapusnya sebelum menyetel model baru. Jikamodel adalah None, ini akan membatalkan setelan model lama.
TreeView.set_header_clickable () - Jika disetel ke True, tombol judul kolom dapat diklik.
TreeView.append_column () - Ini menambahkan yang ditentukan TreeViewColumn ke daftar kolom.
TreeView.remove_column () - Ini menghapus kolom tertentu dari tampilan pohon.
TreeView.insert_column () - Ini menyisipkan file column ke tampilan pohon di lokasi yang ditentukan oleh position.
Widget TreeView memancarkan sinyal berikut -
kursor berubah | Ini dibunyikan saat kursor bergerak atau disetel. |
perluas-ciutkan-kursor-baris | Ini dibunyikan saat baris di kursor perlu diperluas atau diciutkan. |
baris-diaktifkan | Ini dipancarkan ketika pengguna mengklik dua kali a treeview baris |
baris-runtuh | Ini dikeluarkan saat baris diciutkan oleh pengguna atau tindakan terprogram. |
baris-diperluas | Ini dikeluarkan saat baris diperluas melalui pengguna atau tindakan terprogram. |
Dua contoh widget TreeView diberikan di bawah ini. Contoh pertama menggunakan ListStore untuk menghasilkan ListView sederhana.
Di sini objek ListStore dibuat dan item string ditambahkan ke dalamnya. Objek ListStore ini digunakan sebagai model untuk objek TreeView -
store = gtk.ListStore(str)
treeView = gtk.TreeView()
treeView.set_model(store)
Kemudian CellRendererText ditambahkan ke objek TreeViewColumn dan hal yang sama ditambahkan ke TreeView.
rendererText = gtk.CellRendererText()
column = gtk.TreeViewColumn("Name", rendererText, text = 0)
treeView.append_column(column)
Objek TreeView ditempatkan di jendela tingkat atas dengan menambahkannya ke wadah Tetap.
Contoh 1
Perhatikan kode berikut -
import pygtk
pygtk.require('2.0')
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("TreeView with ListStore")
self.set_default_size(250, 200)
self.set_position(gtk.WIN_POS_CENTER)
store = gtk.ListStore(str)
store.append (["PyQt"])
store.append (["Tkinter"])
store.append (["WxPython"])
store.append (["PyGTK"])
store.append (["PySide"])
treeView = gtk.TreeView()
treeView.set_model(store)
rendererText = gtk.CellRendererText()
column = gtk.TreeViewColumn("Python GUI Libraries", rendererText, text=0)
treeView.append_column(column)
fixed = gtk.Fixed()
lbl = gtk.Label("select a GUI toolkit")
fixed.put(lbl, 25,75)
fixed.put(treeView, 125,15)
lbl2 = gtk.Label("Your choice is:")
fixed.put(lbl2, 25,175)
self.label = gtk.Label("")
fixed.put(self.label, 125,175)
self.add(fixed)
treeView.connect("row-activated", self.on_activated)
self.connect("destroy", gtk.main_quit)
self.show_all()
def on_activated(self, widget, row, col):
model = widget.get_model()
text = model[row][0]
self.label.set_text(text)
def main():
gtk.main()
return
if __name__ == "__main__":
bcb = PyApp()
main()
Item yang dipilih oleh pengguna ditampilkan pada label di jendela sebagai on_activated callback fungsi dipanggil.
Contoh 2
Contoh kedua membangun TreeView hierarkis dari TreeStore. Program ini mengikuti urutan yang sama untuk membangun toko, menyetelnya sebagai model untuk TreeView, mendesain TreeViewColumn, dan menambahkannya ke TreeView.
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("TreeView with TreeStore")
self.set_size_request(400,200)
self.set_position(gtk.WIN_POS_CENTER)
vbox = gtk.VBox(False, 5)
# create a TreeStore with one string column to use as the model
store = gtk.TreeStore(str)
# add row
row1 = store.append(None, ['JAVA'])
#add child rows
store.append(row1,['AWT'])
store.append(row1,['Swing'])
store.append(row1,['JSF'])
# add another row
row2 = store.append(None, ['Python'])
store.append(row2,['PyQt'])
store.append(row2,['WxPython'])
store.append(row2,['PyGTK'])
# create the TreeView using treestore
treeview = gtk.TreeView(store)
tvcolumn = gtk.TreeViewColumn('GUI Toolkits')
treeview.append_column(tvcolumn)
cell = gtk.CellRendererText()
tvcolumn.pack_start(cell, True)
tvcolumn.add_attribute(cell, 'text', 0)
vbox.add(treeview)
self.add(vbox)
self.connect("destroy", gtk.main_quit)
self.show_all()
PyApp()
gtk.main()
TreeView berikut ditampilkan sebagai output -