Skip to main content
 首页 » 编程设计

python之Gtk.TreeView 中的 Gtk.Entry(CellRenderer)

2025年05月04日16kevingrace

我想将 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。