2016-05-16 5 views
-1

http://code.activestate.com/recipes/578860-setting-up-a-listbox-filter-in-tkinterpython-27/を参照してくださいこれを行うには2つ以上のリストボックスを使用する方法がありますか?例:姓と名のリストボックス。私はこれをやろうとしましたが、両方の列を個別に検索してリンクする必要があります。Tkinter検索/フィルタバー - csvファイル

+0

を、あなたはもう少し実際の問題についてを説明していただけますか? –

+0

エントリラベルを使用してCSVファイル内の特定の結果を検索します。 2つの列は名字です。これは質問に記載されたリンクに表示されていますが、これはファーストネームのみのためです。これを実行しようとすると、姓と名の両方が検索されます。これは、表示された結果がリンクされていないことを意味します(姓と名が一致しません)。最初の名前を検索して結果を表示する方法はありますか(まだ最初の名前と最後の名前が隣り合っている) –

答えて

1

私はあなたの問題の権利を得た場合、あなたはこのような何か文句を言わない:

from Tkinter import * 

# First create application class 


class Application(Frame): 

    def __init__(self, master=None): 
     Frame.__init__(self, master) 

     self.lbox_list = [('Adam', 'Mitric'), 
          ('Lucy', 'Devic' ), 
          ('Bob' , 'Freamen'), 
          ('Amanda', 'Ling'), 
          ('Susan', 'Cascov')] 

     self.pack() 
     self.create_widgets() 

    # Create main GUI window 
    def create_widgets(self): 
     self.search_var = StringVar() 
     self.search_var.trace("w", lambda name, index, mode: self.update_list()) 
     self.entry = Entry(self, textvariable=self.search_var, width=13) 
     self.lbox1 = Listbox(self, width=20, height=15) 
     self.lbox2 = Listbox(self, width=20, height=15)   # Second List Box. Maybe you can use treeview ? 

     self.entry.grid(row=0, column=0, padx=10, pady=3) 
     self.lbox1.grid(row=1, column=0, padx=10, pady=5) 
     self.lbox2.grid(row=1, column=1, padx=10, pady=5) 

     # Function for updating the list/doing the search. 
     # It needs to be called here to populate the listbox. 
     self.update_list() 

    def update_list(self): 
     search_term = self.search_var.get() 

     # Just a generic list to populate the listbox 

     self.lbox1.delete(0, END) 
     self.lbox2.delete(0, END)  # Deletng from second listbox 

     passed = []      # Need this to check for colisions 

     for item in self.lbox_list: 
      if search_term.lower() in item[0].lower(): 
       self.lbox1.insert(END, item[0]) 
       self.lbox2.insert(END, item[1]) 
       passed.append(item) 

     for item in self.lbox_list: 
      if search_term.lower() in item[1].lower() and item not in passed: 
       self.lbox1.insert(END, item[0]) 
       self.lbox2.insert(END, item[1]) 


root = Tk() 
root.title('Filter Listbox Test') 
app = Application(master=root) 
app.mainloop() 
関連する問題