ラムダイベントハンドラでしばらく読んだら、本当に私を混乱させました。例えば私は、以下の2行のコードがあります。ラムダイベントハンドラが宣言されていない可能性がありますか?
b1 = Button(root,text="Show",command=(lambda e=ents :fetch(e)))
root.bind("<Return>",(lambda event, e=ents : fetch(e)))
エントをタプルのリストを返す関数です。 [("a",x),("b",y)]
と言いますが、x
とy
は、私の仕事を説明するためにエントリ(texbox
)から取得しています。 フェッチはタプルの最初の行のために
def fetch(entries):
for entry in entries:
field = entry[0]
text = entry[1].get()
print ("%s: %s" %(field,text))
を出力シンプルな機能である、ラムダは何のイベント引数を取っていないと我々は結合の際にイベントを使用しながら、私たちは直接、コンテキスト(
ents
)を得ました。だから、なぜ我々はあるイベントでイベントを使用し、他のイベントでは使用しないのですか?
もう一つの問題は、なぜ我々は(この場合はe
に)変数にリストを割り当てる必要がないのであれば、それはエラーを返しますので、直接そのよう
root.bind("<Return>",(lambda event,ents: fetch(ents)))
それを使用することはできません:<lambda>() missing 1 required positional argument: 'ents'
2番目の質問では、 'e = ents'はデフォルト引数として関数引数' e'に変数entsの現在の値を代入しています。つまり、ラムダ関数が呼び出されたときに、その引数を指定する必要はありません。 – khelwood