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.TreeView
.
Obsah článku
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.