我想将Gtk.Entry
(Gtk.EntryCompletion
连接)打包到Gtk.TreeView
的单元格中。有谁知道如何做到这一点? (我只需要在表格视图中的文本条目上输入完成。)
我是否需要继承Gtk.CellRenderer
或Gtk.CellRendererText
,并覆盖start_editing
方法(或类似方法)?我可以找到子类化Gtk.CellRenderer
的示例,但不能修改可编辑行为。我找不到Gtk.CellRendererText
类的源代码。
我正在使用Gobject Introspection(即from gi.repository import Gio, Gtk, GLib, Gdk
)。
答案 0 :(得分:4)
好的,我终于知道如何做到这一点。
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
。
答案 1 :(得分:2)
你不应该是子类,GTK +很少需要这个。当然,它在Python中比在C中更实用,如果是这样的话应该没问题。
This page通过将editable
属性设置为TRUE
来说明如何启用编辑。
您可以使用gtk_tree_view_set_cursor()
将光标移动到单元格,也可以通过编程方式开始编辑。