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