首页 > 解决方案 > Tkinter 按钮未从函数返回值

问题描述

我目前正在尝试为一个函数创建一个小型 UI,该函数根据已输入的字符串从数据框中返回一些值。字符串被拆分,每个单独的子字符串都使用 iloc 在我的数据框中查找。问题是,当使用 Tkinter 中的按钮调用此函数时,没有返回任何内容。没有 Tkinter 就可以正常工作,所以我不确定错误发生在哪里。

master = Tk()
e1 = Entry(master)

list_of_inputs = e1.get().split()

def show_entry_fields():
    i=0
    while (i<len(list_of_inputs)):
        return (backend.loc[backend['Keyword'] == list_of_inputs[i]]) 
        i=i+1

Label(master, text="Enter Title").grid(row=0)

e1.grid(row=0, column=1)

Button(master, text='Show', command=show_entry_fields).grid(row=0, column=2, sticky=W, pady=4)

mainloop( )

标签: pythonpandastkinter

解决方案


几件事:

  • 在用户有机会填写之前,您正在检查您的条目的值。您应该仅在按下按钮时获取用户输入。
  • show_entry_fields()无论提供多少输入,函数中的 while 循环将始终运行一次,因为您在循环中放置了 return 语句
  • 您的处理程序函数必须修改现有的数据结构或图形组件,如果您返回结果,您将无法收集它

可能的实现:

master = Tk()
e1 = Entry(master)


def show_entry_fields():
    list_of_inputs = e1.get().split()
    result = []
    for entry in list_of_inputs:
        result.append(backend.loc[backend['Keyword']] == entry)
    # Alternatively, you can create the list with
    # result = [backend.loc[backend['Keyword']] == entry for entry in list_of_inputs]
    # Here, deal with the result    

Label(master, text="Enter Title").grid(row=0)
e1.grid(row=0, column=1)
Button(master, text='Show', command=show_entry_fields).grid(row=0, column=2, sticky=W, pady=4)
mainloop()

推荐阅读