2012-12-11 30 views
1

這是我今天早些時候提出的同樣的問題,以及您嘗試幫助我的幾個問題,但是我無法使其工作。我想要做的就是用我在單擊列表框時選擇的多個選項填充「ichose」。Python中的問題從Tkinter列表框中獲取多個選擇

import Tkinter as tk 
from Tkinter import * 
global ichose 

class App(tk.Frame): 
    def __init__(self, master): 
     tk.Frame.__init__(self,master) 
     self.master=master 
     self.grid() 
     self.ichose =() 

     self.l = Listbox(self, height=10, selectmode=EXTENDED) 
     # Selectmode can be SINGLE, BROWSE, MULTIPLE or EXTENDED. Default BROWSE 
     self.l.grid(column=0, row=0, sticky=(N,W,E,S)) 
     self.l.bind("Double-Button-1", self.entered) 

     s = Scrollbar(self, orient=VERTICAL, command=self.l.yview) 
     s.grid(column=0, row=0, sticky=(N,S,E)) 
     self.l['yscrollcommand'] = s.set 

     for i in range(1,101): 
      self.l.insert('end', 'Line %d of 100' % i) 


    def entered(self, event): 
     self.ichose = self.selection_get() 
     self.ichose = ('hello') 

root=tk.Tk() 
root.title('Listbox Problem') 
root.geometry('200x200') 
app=App(root) 
root.mainloop() 

print app.ichose 

不管我做什麼,「ichose」作爲一個空元組()出現。 很明顯,「進入」功能從來沒有被調用,因爲我從來沒有看到測試字符串'你好'。

我也不知道「雙按鈕」,「<>」等各種選項是什麼,我在哪裏可以找到每一個列表和解釋?

如果有人可以請只修改我的程序,使「打印毛櫸糖」的作品,我會很感激。你可以從我的程序中看到,我並不真正知道自己在做什麼,但熱衷於學習。謝謝。

回答

2

我終於找到了自己問題的答案。如果要從列表框中捕獲多個響應,這非常有用。我已經評論了很多。希望能幫助到你!

import Tkinter as tk 
from Tkinter import * 

class App(tk.Frame): 
    def __init__(self, master): 
     tk.Frame.__init__(self,master) 
     self.master=master 
     self.grid() 
     self.ichose = [] 

     self.l = Listbox(self, height=10, selectmode=MULTIPLE) 
     # Selectmode can be SINGLE, BROWSE, MULTIPLE or EXTENDED. Default BROWSE 
     self.l.grid(column=0, row=0, sticky=(N,W,E,S)) 

     s = Scrollbar(self, orient=VERTICAL, command=self.l.yview) 
     s.grid(column=0, row=0, sticky=(N,S,E)) 
     self.l['yscrollcommand'] = s.set 

     for i in range(1,101): 
      self.l.insert('end', 'Line %d of 100' % i) 

     # Create Textbox that will display selected items from list 
     self.selected_list = Text(self,width=20,height=10,wrap=WORD) 
     self.selected_list.grid(row=12, column=0, sticky=W)   

     # Now execute the poll() function to capture selected list items 
     self.ichose = self.poll() 

    def poll(self): 
     items =[] 
     self.ichose = [] 
     # Set up an automatically recurring event that repeats after 200 millisecs 
     self.selected_list.after(200, self.poll) 
     # curselection retrieves the selected items as a tuple of strings. These 
     # strings are the list indexes ('0' to whatever) of the items selected. 
     # map applies the function specified in the 1st parameter to every item 
     # from the 2nd parameter and returns a list of the results. So "items" 
     # is now a list of integers 
     items = map(int,self.l.curselection()) 

     # For however many values there are in "items": 
     for i in range(len(items)): 
      # Use each number as an index and get from the listbox the actual 
      # text strings corresponding to each index, and append each to 
      # the list "ichose". 
      self.ichose.append(self.l.get(items[i])) 
     # Write ichose to the textbox to display it. 
     self.update_list() 
     return self.ichose 

    def update_list(self): 
     self.selected_list.delete(0.0, END) 
     self.selected_list.insert(0.0, self.ichose) 


root=tk.Tk() 
root.title('Listbox Multi-Capture') 
root.geometry('200x340') 
app=App(root) 
root.mainloop() 

print app.ichose 
1
# ----------------[ Listbox EXAMPLE ]---------------- 

    self.sarcCountries = (
     "Bangladesh", 
     "India", 
     "Pakistan", 
     "Nepal", 
     "Bhutan", 
     "Sri Lanka", 
     "Afghanistan" 
    ) 

    self.listData = StringVar(value = self.sarcCountries) 

    self.listbox = Listbox(
     master   = self, 
     height   = 10, 
     listvariable  = self.listData, 
     selectmode  = MULTIPLE, 
     selectbackground = "#BC80CC" 
    ) 

    self.listbox.bind("<<ListboxSelect>>", self.OnListboxSelectionChanged) 

    self.listbox.pack(fill = BOTH, expand = 0, padx = 10, pady = 10) 
# ----------------[ Listbox EXAMPLE ]---------------- 


def OnListboxSelectionChanged(self, val): 
    # NOTE: If your listbox's select mode is MULTIPLE, then you may use this portion of code 
    selections = val.widget.curselection() 

    print("---------------------------") 

    if (selections !=()): 
     for index in selections: 
      print(self.sarcCountries[int(index)]) 

    print("---------------------------")