2012-10-26 82 views
2

是否有更簡單的方法來更改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) 

回答

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

爲了擴展Tim的答案,如果使用tkinter.listbox的「currentselection()」函數,也可以對多個項目執行此操作。

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添加到索引而不是減去。您也想要將循環的列表顛倒過來,以便變化的索引不會干擾集合中的未來動作。