Začněte opět se vzorem GTK aplikace. V Glade si vyrobte okno s jedním tlačítkem a jedním prvkem gtk.TreeView.
Tento kód používá část metod objektu gtk.TreeStore. Vložte do funkce __init__() v programu následující trochu složitý kód a projdeme si, co se děje.
## Přidáme TreeStore -- neviditelný widget k uskladnění dat self.treestore1 = gtk.TreeStore(gtk.gdk.Pixbuf, str) self.w("treeview1").set_model(self.treestore1) ## Do TreeView přidáme první sloupec self.tvColumn1= gtk.TreeViewColumn() self.w("treeview1").append_column(self.tvColumn1) ## Do prvního sloupce přidáme místo pro obrázek render_pixbuf = gtk.CellRendererPixbuf() self.tvColumn1.pack_start(render_pixbuf, expand=False) self.tvColumn1.add_attribute(render_pixbuf, 'pixbuf', 0) ## Do prvního sloupce přidáme místo pro text hned za obrázek render_text = gtk.CellRendererText() self.tvColumn1.pack_start(render_text, expand=True) self.tvColumn1.add_attribute(render_text, 'text', 1) ## Vyrobime prvni radek v seznamu obrazek = self.w("treeview1").render_icon(stock_id=getattr(gtk, "STOCK_COLOR_PICKER"),\ size=gtk.ICON_SIZE_MENU, detail=None) text = "Radek v tabulce" ThisTreestoreRow = self.treestore1.append(parent=None, row=(obrazek, text))
Přidejte pod předchozí kód do funkce __init__ následující řádky:
## Vyrobime druhy radek v seznamu obrazek = self.w("treeview1").render_icon(stock_id=getattr(gtk, "STOCK_COLOR_PICKER"),\ size=gtk.ICON_SIZE_MENU, detail=None) text = "Radek v tabulce" self.treestore1.append(parent=None, row=(obrazek, text))
Alternativa: Jako parametr parent můžete použít už existující řádek:
## Vyrobime druhy radek v seznamu obrazek = self.w("treeview1").render_icon(stock_id=getattr(gtk, "STOCK_COLOR_PICKER"),\ size=gtk.ICON_SIZE_MENU, detail=None) text = "Radek v tabulce" self.treestore1.append(parent=ThisTreestoreRow, row=(obrazek, text))
V čem se chování kódu liší?
Pozn. galerii nachystaných obrázků v GTK najdete např. zde.
## Ruční přidání obsluhy události self.w("treeview1").get_selection().set_mode("GTK_SELECTION_MULTIPLE") self.w("treeview1").get_selection().connect('changed', self.treeview1_on_selection_changed)Přidejte dále tuto obsluhu událostí:
def treeview1_on_selection_changed(self, selection): treeiter = self.treestore1.get_iter_first() print while treeiter != None: if self.w("treeview1").get_selection().iter_is_selected(treeiter): print "Row", self.treestore1.get_string_from_iter(treeiter), "is selected" else: print "Row", self.treestore1.get_string_from_iter(treeiter), "is NOT selected" treeiter=self.treestore1.iter_next(treeiter)