# Simple TreeView with ListStore (Python)

Marta Maria Casetti
mmcasetti@gmail.com 2012
A TreeView displaying a ListStore (simpler example)
Anders Jonsson
anders.jonsson@norsjovallen.se 2018

# Simple TreeView with ListStore

This TreeView displays a simple ListStore with the selection "changed" signal connected.

# Code used to generate this example

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)

# the data in the model (three strings for each row, one for each # column) listmodel = Gtk.ListStore(str, str, str) # append the values in the model for i in range(len(phonebook)): listmodel.append(phonebook[i])

# a treeview to see the data stored in the model view = Gtk.TreeView(model=listmodel) # for each column for i, column in enumerate(columns): # cellrenderer to render the text cell = Gtk.CellRendererText() # the text in the first column should be in boldface if i == 0: cell.props.weight_set = True cell.props.weight = Pango.Weight.BOLD # the column is created col = Gtk.TreeViewColumn(column, cell, text=i) # and it is appended to the treeview view.append_column(col)

# when a row is selected, it emits a signal view.get_selection().connect("changed", self.on_changed)

# the label we use to show the selection self.label = Gtk.Label() self.label.set_text("")

# a grid to attach the widgets grid = Gtk.Grid() grid.attach(view, 0, 0, 1, 1) grid.attach(self.label, 0, 1, 1, 1)

# attach the grid to the window self.add(grid)

def on_changed(self, selection): # get the model and the iterator that points at the data in the model (model, iter) = selection.get_selected() # set the label to a new value depending on the selection 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)

# Useful methods for a TreeView widget

The TreeView widget is designed around a Model/View/Controller design: the Model stores the data; the View gets change notifications and displays the content of the model; the Controller, finally, changes the state of the model and notifies the view of these changes. For more information, and for a list of useful methods for TreeModel, see .

In line 44 the `"changed"` signal is connected to the callback function `on_changed()` using `widget.connect(signal, callback function)`. See for a more detailed explanation.

# API-referenser

In this sample we used the following:

GtkTreeView

GtkTreeModel

GtkListStore

GtkCellRendererText

GtkTreeViewColumn

pygobject - Python bindings for GObject Introspection

Typsnitt