# Jednoduchý TreeView s ListStore (Python)

Marta Maria Casetti
mmcasetti@gmail.com 2012
TreeView zobrazující ListStore (jednodušší příklad)

# Jednoduchý TreeView s ListStore

Tento TreeView zobrazuje jednoduchý ListStore s napojeným signálem `"changed"` (změna výběru).

# Kód použitý k vygenerování tohoto příkladu

from gi.repository import Gtk from gi.repository import Pango import sys

columns = ["First Name", "Last Name", "Phone Number"]

phonebook = [["Jurg", "Billeter", "555-0123"], ["Johannes", "Schmid", "555-1234"], ["Julita", "Inca", "555-2345"], ["Javier", "Jardon", "555-3456"], ["Jason", "Clinton", "555-4567"], ["Random J.", "Hacker", "555-5678"]]

class MyWindow(Gtk.ApplicationWindow):

def __init__(self, app): Gtk.Window.__init__(self, title="My Phone Book", application=app) self.set_default_size(250, 100) self.set_border_width(10)

# Datový model (tři řetězce pro každý řádek, jeden na každý # slupec) listmodel = Gtk.ListStore(str, str, str) # Nasype do modelu hodnoty for i in range(len(phonebook)): listmodel.append(phonebook[i])

# Stromové zobrazení pro zobrazení dat uložených v modelu view = Gtk.TreeView(model=listmodel) # Pro každý sloupec for i, column in enumerate(columns): # Vykreslovač buňky vykreslí text cell = Gtk.CellRendererText() # Text v prvním sloupci má být tučný if i == 0: cell.props.weight_set = True cell.props.weight = Pango.Weight.BOLD # Vytvoří sloupec col = Gtk.TreeViewColumn(column, cell, text=i) # Připojí sloupec do stromového zobrazení view.append_column(col)

# Když je vybrán řádek, je vyslán signál view.get_selection().connect("changed", self.on_changed)

# Popisek, který se používá k zobrazení výběru self.label = Gtk.Label() self.label.set_text("")

# Mřížka pro připojení widgetů grid = Gtk.Grid() grid.attach(view, 0, 0, 1, 1) grid.attach(self.label, 0, 1, 1, 1)

# Připojí mřížku do okna self.add(grid)

def on_changed(self, selection): # Získá model a iterátor, který ukazuje na data v modelu (model, iter) = selection.get_selected() # Nastaví popisek na novou hodnotu podle výběru self.label.set_text("\n %s %s %s" % (model[iter][0], model[iter][1], model[iter][2])) return True

class MyApplication(Gtk.Application):

def __init__(self): Gtk.Application.__init__(self)

def do_activate(self): win = MyWindow(self) win.show_all()

def do_startup(self): Gtk.Application.do_startup(self)

app = MyApplication() exit_status = app.run(sys.argv) sys.exit(exit_status)

# Užitečné metody pro widget TreeView

Widget `TreeView` je vytvořen okolo návrhu Model/Zobrazení/Ovládání: Model uchovává data, Zobrazení dodává upozornění na změny a zobrazuje obsah modelu a konečně Ovládání mění stav modelu a upozorňuje zobrazení na tyto změny. Více informací a seznam použitelných metod pro `TreeModel` najdete v .

Na řádku 44 je signál `"changed"` napojen na funkci zpětného volání `on_changed()` pomocí `widget.connect(signál, funkce zpětného volání)`. Podrobnější vysvětlení viz .

# Odkazy k API

V této ukázce se používá následující:

GtkTreeView

GtkTreeModel

GtkListStore

GtkCellRendererText

GtkTreeViewColumn

pygobject – vazba jazyka Python pro GObject Introspection

Písma