0

Python で tkinter を使用して、ユーザーからクエリを取得し、ループ内の各エントリの内容を出力しています。ただし、最後のエントリのテキストのみが印刷されます。問題を解決するにはどうすればよいですか?

for i in range(len(labels)):
    label=Label(V,text=i, relief=RIDGE,width=8)
    label.pack()
    label.grid(row=counter,column=1,padx=5,pady=5)
    entry = Entry(V, relief=SUNKEN,width=30,justify=RIGHT)
    entry.pack()
    entry.grid(row=counter,column=0,padx=10,pady=5)
    def showevent (event):
        print entry.get()

    entry.bind("<Return>", showevent)
4

1 に答える 1

3

これは、クロージャーに関する一般的な誤解です。基本的entryに、関数の実行時に検索されますが、定義されていません。簡単な修正は、それをデフォルトの引数にすることです。

def showevent(event,entry=entry):
    print entry.get()

これが機能するのは、関数が呼び出されたときではなく、関数が作成されたときにデフォルトの引数が評価されるため、常に必要なエントリを取得できるからです。

于 2013-02-13T06:33:29.217 に答える