a_parida
a_parida

Reputation: 636

Get search terms from input box

I am trying to create a GUI for an auto-complete prototype and am new to tkinter. I want to get the entire input when Space is pressed but I am unable to do so. The idea is to get all the entries in the text box so that I can do some analysis inside a function call.

This is the code:

def kp(event):
    app.create_widgets(1)

import random
def getFromScript(text):
    #########THIS IS A PLACE HOLDER FOR ACTUAL IMPLEMENTATION
    i= random.randint(1,100)
    return ['hello'+str(i),'helou'+text]

from tkinter import *
class Application(Frame):

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

        self.pack()
        self.create_widgets(0)


     # Create main GUI window
    def create_widgets(self,i):
        self.search_var = StringVar()
        self.search_var.trace("w", lambda name, index, mode: self.update_list(i))

        self.lbox = Listbox(self, width=45, height=15)

        if i==0:
             self.entry = Entry(self, textvariable=self.search_var, width=13)
             self.entry.grid(row=0, column=0, padx=10, pady=3)

        self.lbox.grid(row=1, column=0, padx=10, pady=3)

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


    def update_list(self,i):

        search_term = self.search_var.get()#### THIS LINE SHOULD READ THE TEXT

        # Just a generic list to populate the listbox
        if(i==0):
             lbox_list = ['Excellent','Very Good','Shabby', 'Unpolite']
        if(i==1):
             lbox_list = getFromScript(search_term)####### PASS TEXT HERE

        self.lbox.delete(0, END)
        for item in lbox_list:
            if search_term.lower() in item.lower():
                self.lbox.insert(END, item)

root = Tk()
root.title('Filter Listbox Test')
root.bind_all('<space>', kp)

app = Application(master=root)

app.mainloop()

Any kind of help is highly appreciable. Thanks in advance

Upvotes: 1

Views: 98

Answers (1)

Lafexlos
Lafexlos

Reputation: 7735

Problem is you are creating a new StringVar on each create_widgets call.

Create StringVar in your __init__.

class Application(Frame):
    def __init__(self, master=None):
        ...
        self.search_var = StringVar()
        ...

Upvotes: 1

Related Questions