Zobrazenie 2D zoznamu
Vzorový kód, pôvodne napísaný pre PHP GTK2 (zverejnený v php-gtk2 Cookbook), ktorý som upravil tak, aby fungoval v Pythone. Príklad ukazuje ako zobraziť obsah zoznamu v prvku gtk.TreeVew.
Cieľ
Tento článok ukazuje základné nastavenie prvku TreeView, v ktorom bude zobrazený jednoduchý zoznam:

Riešenie
Štandardným postupom na zobrazenie dát v treeview je:
- na uchovávanie dát vytvoriť gtk.ListStore alebo gtk.TreeStore (tu je na uchovanie 2D poľa použitý gtk.ListStore),
- na zobrazenie dát vytvoriť gtk.TreeView,
- pre každý stĺpec vytvoriť gtk.TreeViewColumn,
- každý gtk.TreeViewColumn vyžaduje aspoň jeden spravovač bunky (cell renderer), tu sú použité len reťazce, a tak je použitý len gtk.CellRendererText,
- naplnenie modelu,
- aby boli použité posuvníky, je TreeView je zabalený v gtk.ScrolledWindow.
Vzorový kód
import pygtk, gtk, gobject, pango def display_table(vbox, data): # Nastavenie posuvného okna scrolled_win = gtk.ScrolledWindow() scrolled_win.set_policy( gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) vbox.pack_start(scrolled_win) # Vytvorenie zoznamu model = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_LONG, gobject.TYPE_DOUBLE) # note 2 field_header = ('Row #', 'Description', 'Qty', 'Price') # note 3 # vytvorenie TreeView, na zobrazenie zoznamu view = gtk.TreeView(model) # note 4 scrolled_win.add(view) # note 5 # vytvorenie stĺpcov for col in range(0, len(field_header)): cell_renderer = gtk.CellRendererText() column = gtk.TreeViewColumn( field_header[col], cell_renderer, text=col) view.append_column(column) # naplnenie dátami for row in range(0, len(data)): values = [] for col in range(0, len(data[row])): values.append(data[row][col]) model.append(values) # note 6 window = gtk.Window() window.set_size_request(400, 200) window.connect('destroy', gtk.main_quit) vbox = gtk.VBox() window.add(vbox) # titulok title = gtk.Label("Display 2D Array in GtkTreeView - Part 1") title.modify_font(pango.FontDescription("Times New Roman Italic 10")) title.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse("#0000ff")) title.set_size_request(-1, 40) vbox.pack_start(title, 0, 0) vbox.pack_start(gtk.Label(), 0, 0) # 2D tabuľka data = ( ('row0', 'item 1', 2, 3.1), ('row1', 'item 4', 5, 6.21), ('row2', 'item 7', 8, 9.36), ('row3', 'item 10', 11, 12.4), ('row4', 'item 21', 14, 15.5), ('row5', 'item 36', 17, 18.6), ('row6', 'item 42', 20, 21.73)) display_table(vbox, data) # note 1 window.show_all() gtk.main()
Vysvetlenie
Dáta sú uchovávané v dátovom modeli (tj. gtk.ListStore alebo gtk.TreeStore) a na ich zobrazenie je potrebné pridať prvok TreeView.
- Funkcia, ktorá zjednodušuje zobrazenie 2D poľa v gtk.TreeView.
- Vytvára dátový model pomocou gtk.ListStore, ktorý má štyri stĺpce, prvé dva sú textové (gobject.TYPE_STRING), tretí je celé číslo (gobject.TYPE_LONG) a posledný je desatinné číslo (gobject.TYPE_DOUBLE).
- Vytvorenie zoznamu s hlavičkami stĺpcov.
- Vytvorenie gtk.TreeView, ktorý je napojený na model.
- Pridanie TreeView do posuvného okna.
- Pomocou funkcie gtk.ListStore.append() sú dáta pridávané do modelu, pričom dáta sú v podobe zoznamu a počet polí zoznamu musí zodpovedať počtu stĺpcov dátového modelu.


