2

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

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

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

4

2 回答 2

5

好的,我终于想出了如何做到这一点。

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 常见问题解答,并适用于pygobject.

于 2012-12-07T19:22:15.263 回答
2

您不必子类化,GTK+ 很少需要这个。当然,它在 Python 中(比在 C 中)可能更实用,如果是这样的话应该没问题。

此页面显示如何通过将editable属性设置为 来启用编辑TRUE

您可以使用gtk_tree_view_set_cursor()将光标移动到单元格并以编程方式开始编辑。

于 2012-12-07T09:58:58.220 回答