在Tkinter的列表框改变项目的顺序(changing order of items in tki

2019-07-02 17:41发布

是否有改变项目的顺序在列表框中的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)

Answer 1:

是否有改变项目的顺序在列表框中的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)


Answer 2:

为了扩大添的回答,可以为多个项目,如果你使用“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到索引,而不是减法。 你也想扭转列表中循环,这样不断变化的指标会不会弄乱未来在集合移动。



文章来源: changing order of items in tkinter listbox