Python 从输入框中获取搜索词

Python 从输入框中获取搜索词,python,tkinter,tkinter-entry,Python,Tkinter,Tkinter Entry,我正在尝试为一个自动完成的原型创建一个GUI,我是tkinter的新手。我想在按下空格时获取整个输入,但我无法这样做。其思想是获取文本框中的所有条目,以便我可以在函数调用中进行一些分析 代码如下: def kp(event): app.create_widgets(1) import random def getFromScript(text): #########THIS IS A PLACE HOLDER FOR ACTUAL IMPLEMENTATION i= r

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

代码如下:

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()
def kp(事件):
app.create_小部件(1)
随机输入
def getFromScript(文本):
#########这是实际实施的一个占位符
i=random.randint(1100)
return['hello'+str(i),'helou'+text]
从tkinter进口*
课程申请(框架):
def uuu init uuu(self,master=None):
帧。\uuuu初始化(自,主)
self.pack()
self.create_小部件(0)
#创建主GUI窗口
def create_小部件(self,i):
self.search_var=StringVar()
self.search\u var.trace(“w”,lambda名称、索引、模式:self.update\u列表(i))
self.lbox=Listbox(self,宽度=45,高度=15)
如果i==0:
self.entry=entry(self,textvariable=self.search\u var,width=13)
self.entry.grid(行=0,列=0,padx=10,pady=3)
self.lbox.grid(行=1,列=0,padx=10,pady=3)
#用于更新列表/执行搜索的函数。
#需要在此处调用它来填充列表框。
自我更新清单(一)
def更新列表(自我,i):
search_term=self.search_var.get()
#只是一个用于填充列表框的通用列表
如果(i==0):
lbox_list=[“优秀”、“非常好”、“破旧”、“不受欢迎”]
如果(i==1):
lbox_list=getFromScript(搜索词)######在此处传递文本
self.lbox.delete(0,结束)
对于lbox_列表中的项目:
如果在item.lower()中搜索\u term.lower():
self.lbox.insert(结束,项目)
root=Tk()
title('Filter Listbox Test')
root.bind_all(“”,kp)
应用程序=应用程序(主程序=根)
app.mainloop()

任何形式的帮助都是值得赞赏的。提前感谢

问题是您正在为每个
create\u小部件
调用创建一个新的
StringVar

\uuuu init\uuuu
中创建
StringVar

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