Gtk.Entry in Gtk.TreeView (CellRenderer)
gobject, gobject-introspection, gtk, pygobject, python
Solution
Okay, I finally worked out how to do this.
class CellRendererAutoComplete(Gtk.CellRendererText):
""" Text entry cell which accepts a Gtk.EntryCompletion object """
__gtype_name__ = 'CellRendererAutoComplete'
def __init__(self, completion):
self.completion = completion
Gtk.CellRendererText.__init__(self)
def do_start_editing(
self, event, treeview, path, background_area, cell_area, flags):
if not self.get_property('editable'):
return
entry = Gtk.Entry()
entry.set_completion(self.completion)
entry.connect('editing-done', self.editing_done, path)
entry.show()
entry.grab_focus()
return entry
def editing_done(self, entry, path):
self.emit('edited', path, entry.get_text())
Inspiration dervied from the PyGTK FAQ, and adapted to `pygobject`.
Problem
I want to pack a `Gtk.Entry` (with `Gtk.EntryCompletion` hooked up) into a cell in a `Gtk.TreeView`. Does anyone know how this can be done? (I just need entry completion on a text entry in a tabular view.) Do I perhaps need to subclass `Gtk.CellRenderer` or `Gtk.CellRendererText`, and override the `start_editing` method (or similar)? I can find examples of subclassing `Gtk.CellRenderer`, but not modifying the editable behaviour. I can't find the source-code for the `Gtk.CellRendererText` class, either. I'm using Gobject Introspection (i.e. `from gi.repository import Gio, Gtk, GLib, Gdk`).