论证没有通过部分

时间:2017-03-18 23:39:31

标签: python tkinter functools

完全不熟悉Python,所以我怀疑我犯了一个非常愚蠢的语法错误。

from tkinter import *
from functools import partial

def get_search_results(keyword):
    print("Searching for: ", keyword)

def main():
    # ***** Toolbar *****
    toolbar = Frame(main_window)
    toolbar.pack(fill=X)

    toolbar_search_field = Entry(toolbar)
    toolbar_search_field.grid(row=0, columnspan=4, column=0)
    get_search_results_partial = partial(get_search_results, toolbar_search_field.get())
    toolbar_search_button = Button(toolbar, text="Search", command=get_search_results_partial)
    toolbar_search_button.grid(row=0, column=5)

main_window = Tk()
main()
main_window.mainloop() # continuously show the window

基本上,此代码会创建一个带有搜索栏的窗口。我在搜索栏中输入了一些内容,当我按下按钮时,会调用get_search_results方法。我使用partial来传递函数中的关键字。但是,关键字未打印到控制台。

1 个答案:

答案 0 :(得分:2)

get_search_results_partial = partial(get_search_results, toolbar_search_field.get())

立即调用toolbar_search_field.get()(可能是一个空字符串),然后将其传递给partial。现在get_search_results_partial是一个零参数的函数,只调用get_search_results('')。它与工具栏没有任何关联。

正如评论中所建议的,只需这样做:

Button(toolbar, text="Search", command=lambda: get_search_results(toolbar_search_field.get()))