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

问题描述 投票:2回答:2

与删除特定键的值,然后重新输入新信息相比,在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)
python user-interface listbox widget tkinter
2个回答
5
投票

与删除特定键的值,然后重新输入新信息相比,在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
投票

为了扩展蒂姆的答案,如果您使用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添加到索引而不是减法。您还希望反转循环列表,以使不断变化的索引不会弄乱集合中将来的移动。

© www.soinside.com 2019 - 2024. All rights reserved.