更改tkinter列表框中项目的顺序

时间:2012-10-26 16:58:43

标签: python user-interface listbox widget tkinter

是否有更简单的方法来更改tkinter列表框中的项目顺序,而不是删除特定键的值,然后重新输入新信息?

例如,我希望能够重新安排列表框中的项目。如果我想换掉两个位置,这就是我所做的。它有效,但我只是想看看是否有更快的方法来做到这一点。

def moveup(self,selection):
    value1 = int(selection[0]) - 1 #value to be moved down one position
    value2 = selection #value to be moved up one position
    nameAbove = self.fileListSorted.get(value1) #name to be moved down
    nameBelow = self.fileListSorted.get(value2) #name to be moved up

    self.fileListSorted.delete(value1,value1)
    self.fileListSorted.insert(value1,nameBelow)
    self.fileListSorted.delete(value2,value2)
    self.fileListSorted.insert(value2,nameAbove)

2 个答案:

答案 0 :(得分:4)

  

是否有更简单的方法来更改tkinter列表框中的项目顺序,而不是删除特定键的值,然后重新输入新信息?

没有。删除和重新插入是唯一的方法。如果你只想将一个项目向上移动一个,你可以只用一个删除和插入来完成它。

def move_up(self, pos):
    """ Moves the item at position pos up by one """

    if pos == 0:
        return

    text = self.fileListSorted.get(pos)
    self.fileListSorted.delete(pos)
    self.fileListSorted.insert(pos-1, text)

答案 1 :(得分:1)

为了扩展Tim的答案,如果您使用" currentselection()"也可以为多个项目执行此操作。 tkinter.listbox的功能。

l = self.lstListBox
    posList = l.curselection()
    # exit if the list is empty
    if not posList:
        return

    for pos in posList:
        # skip if item is at the top
        if pos == 0:
            continue
        text = l.get(pos)
        l.delete(pos)
        l.insert(pos-1, text)

这会将所有选定的项目移动到1个位置。它也可以很容易地适应移动项目。您必须检查项目是否在列表的末尾而不是顶部,然后将1添加到索引而不是减去。您还需要反转循环列表,以便更改索引不会弄乱集合中的未来移动。