Python 在树上来回走动

Python 在树上来回走动,python,tkinter,treeview,ttk,Python,Tkinter,Treeview,Ttk,我正在使用Os.walk()在python中填充tkinter树视图,但是在填充之后,我希望能够使用按钮对树的叶子重新排序 向上移动树的命令工作得很好(我希望能够一次移动多片叶子) 但当我把它倒过来倒在树上时,我发现了一只奇怪的虫子 def moveDown(): leaves = Tree.selection() for i in leaves: Tree.move(i, Tree.parent(i), Tree.index(i)+1) 我只能向下移动一片叶子

我正在使用Os.walk()在python中填充tkinter树视图,但是在填充之后,我希望能够使用按钮对树的叶子重新排序

向上移动树的命令工作得很好(我希望能够一次移动多片叶子)

但当我把它倒过来倒在树上时,我发现了一只奇怪的虫子

def moveDown():
    leaves = Tree.selection()
    for i in leaves:
        Tree.move(i, Tree.parent(i), Tree.index(i)+1)

我只能向下移动一片叶子,如果我选择奇数片叶子,那么最低的一片叶子就会向下移动,如果我选择偶数片叶子,它们都不会移动。

正如注释中所建议的那样,使用reversed()以相反的顺序遍历叶子,解决了这个问题。(可能是评论,但我没有这个名声)


我怀疑问题在于,当你向上移动某个东西时,下面所有东西的索引都会发生变化。尝试以相反的顺序遍历
树叶
,看看这是否有帮助。我如何以相反的顺序遍历树叶?不需要将此作为注释。如果对解决方案发表评论的用户选择不将其作为答案,那么其他人完全可以这样做。特别是如果其他人提供了一个代码示例,就像您所做的那样。
def moveDown():
    leaves = Tree.selection()
    for i in leaves:
        Tree.move(i, Tree.parent(i), Tree.index(i)+1)
def moveDown():
    leaves = Tree.selection()
    for i in reversed(leaves):
        Tree.move(i, Tree.parent(i), Tree.index(i)+1)