Hello ML :-),
i’ve started to write a small GUI with GTK. A lot of thinks work fine,
but I have one problem: I want to have a list - like the email list at
the usual mail client. Tutorials told me, that I have to use TreeView.
I created an instance of ListStore and added a row. I see the row, and
I’m able to click on the row (the row change the color) but i don’t see
any text in the cells. Does anyone have an idea how to fix it?
Thanks and bye,
Patrick
here is my code:
list_store = Gtk::ListStore.new(String, String, String)
iter = list_store.append
iter[0] = “First”
iter[1] = “Second”
iter[2] = “Third”
view = Gtk::TreeView.new(list_store)
renderer = Gtk::CellRendererText.new
column = Gtk::TreeViewColumn.new(“Foo”, renderer)
column.resizable = true
view.append_column(column)
column = Gtk::TreeViewColumn.new(“Bar”, renderer)
column.resizable = true
view.append_column(column)
column = Gtk::TreeViewColumn.new(“Mix”, renderer)
column.resizable = true
view.append_column(column)
vbox.pack_start(view)
view.show_all
I created an instance of ListStore and added a row. I see the row, and
I’m able to click on the row (the row change the color) but i don’t see
any text in the cells. Does anyone have an idea how to fix it?
Try to replace these lines :
column = Gtk::TreeViewColumn.new(“Foo”, renderer)
column = Gtk::TreeViewColumn.new(“Bar”, renderer)
column = Gtk::TreeViewColumn.new(“Mix”, renderer)
by these :
column = Gtk::TreeViewColumn.new(“Foo”, renderer, :text => 0)
column = Gtk::TreeViewColumn.new(“Bar”, renderer, :text => 1)
column = Gtk::TreeViewColumn.new(“Mix”, renderer, :text => 2)
This is the easy way to affect the content of a column to the data
stored in
the model. The last argument of the TreeViewColumn constructor is a hash
of
attributes which define a mapping between the data in the model, and
what
will appear in the TreeView (those attributes can be reaffected later
with
#add_attribute or #set_attributes)
In your case, you created this model :
iter[0] = “First”
iter[1] = “Second”
iter[2] = “Third”
The attribute {:text => 0} means “I want to map directly the content of
iter[0] to the rendered text of the “Foo” column”.
Another way to do this is by using the #set_cell_data_func method, which
let
you define the rendering of the cell from the given block (using
CellRenderer#text=, for example)
Hello,
thanks for reply. Your code works fine. I’m also able so sort the
columns :-).
Thanks,
Patrick