从输入框中获取搜索字词

时间:2018-01-28 12:13:18

标签: python tkinter tkinter-entry

我正在尝试为自动完成原型创建一个GUI,并且是tkinter的新手。我想在按下 Space 时获取整个输入,但我无法这样做。我们的想法是获取文本框中的所有条目,以便我可以在函数调用中进行一些分析。

这是代码:

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()

任何形式的帮助都非常值得赞赏。提前致谢

1 个答案:

答案 0 :(得分:1)

问题是您是否在每个StringVar电话上创建了新的create_widgets

StringVar中创建__init__

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