无法在 GtkTreeView 可编辑行中使用键盘输入(但可以右键单击 + 粘贴)

Can't type using keybord in GtkTreeView Editable row (But Can right click + paste)

我在 C:

中使用 Gtk3 时遇到一个奇怪的问题

我有一个 2 列(都是文本)的 GTKTreeView,我在上面(动态地)添加了一行:
该行的第二列是 'Editable'(使用空地)。
我可以双击单元格,这会触发编辑模式:背景变为白色,并出现光标。
但是,我无法使用键盘输入 CELL:尽管鼠标似乎可以工作(我可以毫无问题地粘贴到单元格中)。

TreeView 本身打开了 'CAN_FOCUS' 标志。
我在这里错过了什么?

下面是一个小程序,可以按照您的描述进行操作(您真的应该 post 一个小示例代码来展示您的问题!)。很抱歉 - 它在 Python 中 - 但它对你来说应该足够相似了。注:

  • can_focus在这里没有作用(事实上,它可能是默认打开的)
  • 你必须启用正确的渲染器 'editable'(我相信你做到了)
  • 您必须将处理程序连接到渲染器的 'edited' 信号,并自行更新商店。

清单:

from gi.repository import Gtk

class MainWindow(Gtk.Window):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.set_size_request(150, 60)
        self.connect("destroy", lambda x: Gtk.main_quit())

        store = Gtk.ListStore(str, str)
        view = Gtk.TreeView(model = store)

        for i, hdr in enumerate(("Col1", "Col2")):
            if i == 1:
                renderer = Gtk.CellRendererText(editable = True)
                renderer.connect("edited", self.on_edited)
            else:
                renderer = Gtk.CellRendererText()
            col = Gtk.TreeViewColumn(hdr, renderer, text = i)
            view.append_column(col)

        store.append(("One", "Two"))

        self.add(view)
        self.show_all()

    def on_edited(self, renderer, path, new_text):
        print(" Modify the store here [edited text:  %s]" % new_text)


    def run(self):
        Gtk.main()

def main(args):
    mainwdw = MainWindow()
    mainwdw.run()

    return 0

if __name__ == '__main__':
    import sys
    sys.exit(main(sys.argv))

初始window:

点击第 2 列:

已编辑:

从处理程序打印: