Python 如何在不带按钮的单独条目小部件中基于数据使用列表框自动调用函数

Python 如何在不带按钮的单独条目小部件中基于数据使用列表框自动调用函数,python,tkinter,listbox,Python,Tkinter,Listbox,我试图让我的列表框自动运行查询,并在相应的输入框有值时立即填充。这将在不使用更新或选择按钮(command=)的情况下完成。如果一切都失败了,我将不得不求助于按钮函数调用。。。我希望这不需要使用按钮就可以实现。基本上,自动查询将从“team_input”中获取(l),并使用数据库结果更新levlistbox def autoquery(l): levListbox.delete(0, "end") l = team_input.get() cursor = dbi.cursor

我试图让我的列表框自动运行查询,并在相应的输入框有值时立即填充。这将在不使用更新或选择按钮(command=)的情况下完成。如果一切都失败了,我将不得不求助于按钮函数调用。。。我希望这不需要使用按钮就可以实现。基本上,自动查询将从“team_input”中获取(l),并使用数据库结果更新levlistbox

def autoquery(l):
   levListbox.delete(0, "end")
   l = team_input.get()
   cursor = dbi.cursor()
   cursor.execute("""SELECT level FROM teamstatus WHERE game='%s'"""%(l,))
   rows = cursor.fetchall()
   for results in rows:
      levListbox.insert("end", results)
   root.after(5000, autoquery)

root = Tk() 

teamLabel=Label(topListFrame, text="Team", font="Verdana 8 bold")
teamLabel.grid(row=0,column=0)
team_input = StringVar()
team_input = Entry(topListFrame, textvariable=team_input, width=10)
team_input.grid(row=1,column=0)

levLabel=Label(topListFrame, text="Level", font="Verdana 8 bold")
levLabel.grid(row=0,column=1)
levListbox=Listbox(topListFrame, height=1,width=8)

#TRIED TO USE lambda  WITH autoquery(team_input))

levListbox.grid(row=1, column=1)

autoquery()

root.mainloop()

通过使用
StringVar
和方法
trace\u add
更改条目中的字符串时,可以回调方法。现在您似乎已经想使用
StringVar
,但是:

team_input = StringVar()
team_input = Entry(topListFrame, textvariable=team_input, width=10)
行使
team_input
首先成为执行此操作所需的变量类,但随后您将使用没有多大意义的条目覆盖该变量。尝试替换为:

team_input_var = StringVar()
team_input = Entry(topListFrame, textvariable=team_input_var, width=10)
然后在
mainloop
之前添加:

team_input_var.trace_add('write', autoquery)
如果要在条目中写入的内容发生更改时调用
autoquery


还要注意的是,
def autoquery(l)
看起来是多余的,但是由于
trace\u add
发送了3个不相关的参数,所以用
def autoquery(*args)
替换它。当条目中的字符串被更改时,您可以使用
StringVar
trace\u add
方法来回调方法。现在您似乎已经想使用
StringVar
,但是:

team_input = StringVar()
team_input = Entry(topListFrame, textvariable=team_input, width=10)
行使
team_input
首先成为执行此操作所需的变量类,但随后您将使用没有多大意义的条目覆盖该变量。尝试替换为:

team_input_var = StringVar()
team_input = Entry(topListFrame, textvariable=team_input_var, width=10)
然后在
mainloop
之前添加:

team_input_var.trace_add('write', autoquery)
如果要在条目中写入的内容发生更改时调用
autoquery


还要注意的是,
def autoquery(l)
看起来是多余的,但是由于
trace\u add
发送了3个有些不相关的参数,所以将其替换为
def autoquery(*args)

首先,我一直忘了确保我的Strvar名称与我的条目名称不同……aaaaah。我将尝试跟踪添加感谢,包括(*args)SQL字符串(l)将无法工作。cursor.execute(““”从teamstatus中选择级别,其中游戏='%s'””%(l,))。I get NameError:名称“l”未定义I未注释我的l=team\u input.get(),它工作正常。感谢一个工厂…很抱歉,我得到了错误,所以我是评论疑难解答,但忘记删除。相信我所有的错-只是一个更新。再次感谢。首先,我总是忘了确保我的Strvar名称与我的输入名称不同……啊啊。我将尝试跟踪添加感谢,包括(*args)SQL字符串(l)将无法工作。cursor.execute(““”从teamstatus中选择级别,其中游戏='%s'””%(l,))。I get NameError:名称“l”未定义I未注释我的l=team\u input.get(),它工作正常。感谢一个工厂…很抱歉,我得到了错误,所以我是评论疑难解答,但忘记删除。相信我所有的错-只是一个更新。再次感谢