无法在 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 列:
已编辑:
从处理程序打印:
我在 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 列:
已编辑:
从处理程序打印: