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

时间:2016-08-25 21:07:10

标签: c gtk gtk3

我在C中使用Gtk3时遇到了一个奇怪的问题:

我有一个2列的GTKTreeView(两个TEXT),我在其上添加(动态)单行:
该行的第二列是“可编辑”(使用林间空地) 我可以双击单元格,触发编辑模式:背景变为白色,并出现光标 但是,我无法使用键盘键入CELL:鼠标似乎可以正常工作(我可以毫无问题地粘贴到单元格中)。

TreeView本身已打开“CAN_FOCUS”标志 我在这里错过了什么?

1 个答案:

答案 0 :(得分:0)

以下是一个小程序,它执行您所描述的内容(您应该发布一个显示您问题的小示例代码!)。对不起 - 这是用Python编写的 - 但它应该与你相似。注意:

  • 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)) 在这里没有效果(事实上,默认情况下它可能已开启)
  • 你必须启用正确的渲染器''editable'(我相信你做过)
  • 您必须将处理程序连接到渲染器的“已编辑”信号,并自行更新商店。

清单:

function createNewMainWindow() {
  var a = 1000;
  var b = 800;
  mainWindow = new BrowserWindow({
    show: true,
    width: a,
    height: b,
    minWidth: 300,
    minHeight: 300,
    frame: false,
    title: 'Recall',
    icon: iconPath,
    alwaysOnTop: false,
    useContentSize: false,
    webPreferences: {
      zoomFactor: 1,
      allowRunningInsecureContent: true,
      nodeIntegration: true,
    }
  });
}

app.on('ready', async () => {
  await installExtensions();
  createNewMainWindow();
  mainWindow.loadURL(`file://${__dirname}/app/app.html`); 
  mainWindow.show();
  mainWindow.focus();
}

初始窗口:

Initial window

点击col2:

Click on col2

编辑:

Edited

从处理程序打印:

Output from handler