2016-04-21 53 views
-1

我遇到了幾個解決方案比我有更復雜的問題,所以我很抱歉,如果這是一個重複,但我似乎無法適應其他解決方案,以滿足我的需要實例。蟒蛇 - 返回列表框選擇作爲列表

我需要顯示填充列表框並使用多選方法將選擇作爲列表返回,以便我可以稍後拆分和操作。

這是我到目前爲止有:

from Tkinter import * 

def onselect(evt): 
    w = evt.widget 
    index = int(w.curselection()[0]) 
    value = w.get(index) 
    selection = [w.get(int(i)) for i in w.curselection()] 
    return selection 

master = Tk() 

listbox = Listbox(master,selectmode=MULTIPLE) 

listbox.pack() 

for item in ["one", "two", "three", "four"]: 
    listbox.insert(END, item) 

listbox.bind('<<ListboxSelect>>', onselect) 

mainloop() 

如何正確選擇變量存儲爲一個列表?

+0

到目前爲止你的代碼有什麼問題 – Natecat

+0

也許我沒有正確地訪問選擇列表? 我無法弄清楚如何訪問它,我需要使用列表的值創建目錄。 –

+0

你是說onselect沒有被調用? – Natecat

回答

0

我只是自己學習這個話題。如果我理解正確,你想存儲和使用這個列表供將來使用。我認爲將列表框定義爲一個類,並將列表存儲爲類屬性是一種方法。

以下借鑑了Programming Python,4th ed,Ch。 9.將來的列表可以根據需要以myList.selections的形式訪問。

from tkinter import * 


class myList(Frame): 
    def __init__(self, options, parent=None): 
     Frame.__init__(self, parent) 
     self.pack(expand=YES, fill=BOTH) 
     self.makeWidgets(options) 
     self.selections = [] 

    def onselect(self, event): 
     selections = self.listbox.curselection() 
     selections = [int(x) for x in selections] 
     self.selections = [options[x] for x in selections] 
     print(self.selections) 

    def makeWidgets(self, options): 
     listbox = Listbox(self, selectmode=MULTIPLE) 
     listbox.pack() 
     for item in options: 
      listbox.insert(END, item) 
     listbox.bind('<<ListboxSelect>>', self.onselect) 
     self.listbox = listbox 


if __name__ == '__main__': 
    options = ["one", "two", "three", "four"] 
    myList(options).mainloop() 
+0

它在交互式窗口中動態更新選擇,所以一定可行。謝謝 雖然如何訪問列表? 說我需要命名一個文件夾與第n個索引相同的值? –

+0

@ N_8_我試圖編寫一個簡單的例子,但失敗了。簡而不佳的回答是我認爲這取決於列表是否需要在接口循環運行時或終止後訪問。如果前者和你將myList的一個實例(例如「Bob」)打包到一個更大的框架中,那麼'folder name = Bob.selections [n]'應該可以工作。如果沒有,「鮑勃」必須在它「死亡」之前傳遞信息,而且我仍然在學習如何工作:)也許在幾個星期內我可以給出更好的答案。 –