2

Gtk.Entryを(Gtk.EntryCompletion接続して) を のセルにパックしたいGtk.TreeView。これを行う方法を知っている人はいますか?(表形式ビューのテキスト エントリで入力補完が必要なだけです。)

Gtk.CellRendererまたはをサブクラス化し、メソッド (または同様のもの)Gtk.CellRendererTextをオーバーライドする必要がありますか? start_editingサブクラス化の例を見つけることができますがGtk.CellRenderer、編集可能な動作を変更することはできません。Gtk.CellRendererTextクラスのソースコードも見つかりません。

私は Gobject イントロスペクション (すなわち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 FAQから得られ、 pygobject.

于 2012-12-07T19:22:15.263 に答える
2

サブクラス化する必要はありません。GTK+ でこれが必要になることはめったにありません。もちろん、(C よりも) Python の方が実用的かもしれませんが、そうであれば問題ありません。

このページeditableでは、プロパティを に設定して編集を有効にする方法を示しますTRUE

を使用gtk_tree_view_set_cursor()して、カーソルをセルに移動したり、プログラムで編集を開始したりできます。

于 2012-12-07T09:58:58.220 に答える