gpt4 book ai didi

Python PyGO对象 TreeView : confirm edit after move between cells with Tab key

转载 作者:太空宇宙 更新时间:2023-11-03 19:03:19 24 4
gpt4 key购买 nike

经过很长时间的搜索,我找到了一个解决方案(非常简单),可以使用 Tab 键在 TreeView 网格的单元格之间移动,并在编辑模式下维护单元格。

现在我遇到了一个问题:单元格编辑确认只有在按 Enter 键后才会发生。如果我按 Tab 键,则会触发 edit_canceled 事件。

如何解决?如何允许在按 Tab 键时确认数据?

这是我的 TreeView 按键事件的事件处理程序:

def key_tree_Tab(self, treeview, event,namewidget):
path, col = treeview.get_cursor()
## only visible columns!!
columns = [c for c in treeview.get_columns() if c.get_visible()]
colnum = columns.index(col)

if event.keyval==65289:

if colnum + 1 < len(columns):
next_column = columns[colnum + 1]
treeview.set_cursor(path,next_column,start_editing=True)


else:
tmodel = treeview.get_model()
titer = tmodel.iter_next(tmodel.get_iter(path))
if titer is None:
titer = tmodel.get_iter_first()
path = tmodel.get_path(titer)
next_column = columns[0]
treeview.set_cursor(path,next_column,start_editing=True)

return True

谢谢大家!!!

最佳答案

一个伟大的人找到了一个解决方案:从 gobject 超时调用 set_cursor 方法!!!

我将它从 pygtk 移植到 pygobject,并在之前的方法帖子中进行了调整。

因此,对于所有需要它的人,代码:

def key_tree_Tab(self, treeview, event,namewidget):
keyname = Gdk.keyval_name(event.keyval)

path, col = treeview.get_cursor()
## only visible columns!!
columns = [c for c in treeview.get_columns() if c.get_visible()]
colnum = columns.index(col)


if keyname=="Tab" or keyname=="Esc":

if colnum + 1 < len(columns):
next_column = columns[colnum + 1]

else:
tmodel = treeview.get_model()
titer = tmodel.iter_next(tmodel.get_iter(path))
if titer is None:
titer = tmodel.get_iter_first()
path = tmodel.get_path(titer)
next_column = columns[0]


if keyname == 'Tab':
#Thank you Jordan!!!!!! Great hack!
GLib.timeout_add(50,
treeview.set_cursor,
path, next_column, True)
elif keyname == 'Escape':
pass

非常感谢 Jordan Callicoat 的这些漂亮的黑客作品!

问候。

关于Python PyGO对象 TreeView : confirm edit after move between cells with Tab key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15497766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com