我想将 Gtk.Entry(连接了 Gtk.EntryCompletion)打包到 Gtk.TreeView 的单元格中。有谁知道如何做到这一点? (我只需要在表格 View 中完成文本条目的输入。)
我是否可能需要子类化 Gtk.CellRenderer 或 Gtk.CellRendererText,并覆盖 start_editing 方法(或类似方法)?我可以找到子类化 Gtk.CellRenderer 的示例,但不修改可编辑行为。我也找不到 Gtk.CellRendererText 类的源代码。
我正在使用 Gobject Introspection(即 from gi.repository import Gio, Gtk, GLib, Gdk)。
请您参考如下方法:
好吧,我终于想出了如何做到这一点。
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())
灵感源自 PyGTK FAQ , 并适用于 pygobject。
