我已经在TreeView中实现了拖放,只需在TreeView中移动行即可。我几乎让Gtk3处理所有细节,然后用drag_end信号做我需要做的事。问题在于,Gtk3不会在拖放后保留选中的行。我想选择被删除的行。但我也不想更改视图。
我可以通过在drag_begin信号处抓住它来跟踪移动的项目:
def on_theTreeView_drag_begin(self, treeview, drag_context):
treeselection = treeview.get_selection()
model, iter = treeselection.get_selected()
myGlobalWindow.letterDragged = model.get_value(iter, 0)
然后,在触发drag_end时,我可以搜索移动的项目,然后选择它:
def on_theTreeView_drag_end(self, treeview, context):
# do stuff
# find letter and select that row in the new teaching order
for row in myGlobalWindow.theListStore:
if row[0] == myGlobalWindow.letterDragged:
treeview.set_cursor(row.path)
break
这可以正常工作,但是它将始终将所选行移动到TreeView的顶部。这使用户感到迷惑-他(她)将其拖放到特定位置,但是如果突然跳到TreeView的顶部,则很令人困惑。如果我注释掉set_cursor调用,则拖放工作正常,并且TreeView上的视图完全不会移动(不会跳转),但是TreeView结束时未选择任何行。
所以问题是:拖放操作后是否可以选择TreeView行,并保留TreeView在屏幕上的位置?