I'm looking for any examples of using ColumnView with any kind of model, where each cell will be a EditableLabel which effectively will update the model.
I really appreciate any help here :(
Here is a minimal example in Python:
import gi gi.require_version("Gtk", "4.0") from gi.repository import Gtk, Gio, GObject class DataObject(GObject.GObject): __gtype_name__ = 'DataObject' text = GObject.Property(type=str, default=None) def __init__(self, text, number): super().__init__() self.text = text self.number = number def setup_c1(widget, item): """Setup the widget to show in the Gtk.Listview""" label = Gtk.EditableLabel() item.set_child(label) def bind_c1(widget, item): """bind data from the store object to the widget""" label = item.get_child() obj = item.get_item() label.set_text(obj.text) label.bind_property("text", obj, "text") def setup_c2(widget, item): """Setup the widget to show in the Gtk.Listview""" number = Gtk.Label() item.set_child(number) def bind_c2(widget, item): """bind data from the store object to the widget""" number = item.get_child() obj = item.get_item() number.set_text(obj.number) def on_activate(app): win = Gtk.ApplicationWindow( application=app, title="Gtk4 is Awesome !!!", default_height=400, default_width=400, ) sw = Gtk.ScrolledWindow() list_view = Gtk.ColumnView() factory_c1 = Gtk.SignalListItemFactory() factory_c1.connect("setup", setup_c1) factory_c1.connect("bind", bind_c1) factory_c2 = Gtk.SignalListItemFactory() factory_c2.connect("setup", setup_c2) factory_c2.connect("bind", bind_c2) selection = Gtk.SingleSelection() store = Gio.ListStore.new(DataObject) selection.set_model(store) list_view.set_model(selection) column1 = Gtk.ColumnViewColumn.new("column01", factory_c1) column2 = Gtk.ColumnViewColumn.new("column02", factory_c2) list_view.append_column(column1) list_view.append_column(column2) v1 = DataObject("entry", "02") v2 = DataObject("other", "33") store.append(v1) store.append(v2) sw.set_child(list_view) win.set_child(sw) win.present() app = Gtk.Application(application_id="org.gtk.Example") app.connect("activate", on_activate) app.run(None)
Here is a minimal example in Python: