gtkTreeView, gtkTreeStore a spol.

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))

Vytváření tabulky a stromu v gtk.TreeView

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.

Událost označení řádku v gtk.TreeView

Přidejte toto do funkce __init__
        ## 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)

Zpět na obsah | Poslední úprava: 2012-01-23