2016-09-12 8 views
0

は、私が正しく動作する機能のためのパラメータを設定する必要があります。ラムダ関数:なぜ私はEventHandlerのではなく、ボタン、コマンドにパラメータが必要なのでしょうか? Pythonのラムダコールの次のような場合には

name = Entry(self.new_jobtile, width=30) 
... 
name.bind('<Return>', lambda x:self.create_tile(name.get())) 

私が代わりにボタンを使用する場合は、非常に同じラムダコールは "なしで動作しますx "パラメータ:

Button(self.new_jobtile, text="OK", command=lambda: self.create_tile(name.get()), width=4, height=2).pack(side=BOTTOM, pady=3, padx=5) 

なぜ私は本当に理解できませんか?あなたは引数なしラムダ関数を作成することができますPythonでは

答えて

0

bar = lambda : 4*2 
bar() # 8 

私はあなたが使用しているライブラリを知らないが、私はname.bindで2番目の引数が一つのパラメータ(のようなlambda x:またはdef foo(x):)との関数であるべきだと思いますしかしButtonコンストラクタ引数commandに(lambda :又はdef foo():等)0パラメータを持つ関数であるべきです。

0

私はそのEntryButtonクラスのAPIについては考えているが、ここで私の推測です。おそらくEntrybind方法は、コールバック関数(あなたのラムダ)には、どこかbind方法では、他の言葉で、一つのパラメータを持っている必要があり、このようなコードの一部になります

def bind(self, an_argument, yourcallback): 
    yourcallback(something) 

あなたはこのパラメータを無視し、しかし、あなたはそのbindメソッドがコールバックに渡すかを把握することができます

name.bind('<Return>', lambda x:self.create_tile(str(x) + " " + name.get())) 

他の側からは、packメソッドは、パラメータを渡しません。だからあなたのラムダはその場合に働きます。

関連する問題