2017-03-18 9 views
1

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メソッドが呼び出されます。私は部分的に関数を使ってキーワードを渡しています。ただし、キーワードはコンソールに印刷されていません。

+1

することは、よりラムダ 'のようなものです:GET_SEARCH_RESULTS(toolbar_search_field.get())'。パーシャルはそれが作成された時点で値を取得します。 – jonrsharpe

+0

[Tkinter Entryのget関数が何も返さないのはなぜですか?](http://stackoverflow.com/questions/10727131/why-is-tkinter-entrys-get-function-returning-nothing) –

答えて

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

toolbar_search_field.get()はすぐに(おそらく空の文字列を取得して)部分的に渡します。今すぐget_search_results_partialは、引数がゼロの関数で、ちょうどget_search_results('')を呼び出します。ツールバーには接続していません。

コメントで示唆したように、ちょうどこの操作を行います。私はあなたが欲しいものを疑う

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

私は完全にはありませんラムダの仕組みを理解していますが、これはうまくいきます。 –

関連する問題