是否有更简单的方法来更改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)
答案 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添加到索引而不是减去。您还需要反转循环列表,以便更改索引不会弄乱集合中的未来移动。