Gtk.TreeView中的Gtk.Entry(CellRenderer)

时间:2012-12-07 04:09:22

标签: python gtk pygobject gobject gobject-introspection

我想将Gtk.EntryGtk.EntryCompletion连接)打包到Gtk.TreeView的单元格中。有谁知道如何做到这一点? (我只需要在表格视图中的文本条目上输入完成。)

我是否需要继承Gtk.CellRendererGtk.CellRendererText,并覆盖start_editing方法(或类似方法)?我可以找到子类化Gtk.CellRenderer的示例,但不能修改可编​​辑行为。我找不到Gtk.CellRendererText类的源代码。

我正在使用Gobject Introspection(即from gi.repository import Gio, Gtk, GLib, Gdk)。

2 个答案:

答案 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()将光标移动到单元格,也可以通过编程方式开始编辑。