2

関数を Tkinter の複数の Entry ウィジェットにバインドしようとしています。フレームに for ループで多くの Entry ウィジェットを設定しました。for ループを使用して作成された Entry ウィジェットに関数をバインドするには、次のようなことができると考えました。

import Tkinter as tk   

class Application(tk.Frame):
    def __init__(self, master):
        self.master = master
        tk.Frame.__init__(self, master, width=200, height=200)
        self.master.title('Application')
        self.pack_propagate(0)
        self.pack()

        for i in range(10):
            strVar = tk.StringVar()
            item = tk.Entry(self, textvariable=strVar)
            item.bind(sequence='<Return>', func=lambda strVar=strVar, i=i: self.obtain(i, strVar))
            item.grid(row=i, sticky=tk.W)

    def obtain(self, i, strVar):
        print i
        print strVar.get()

    def run(self):
        self.mainloop()

app = Application(tk.Tk())
app.run()

しかし、次のエラーが発生しています。

print strVar.get()
AttributeError: Event instance has no attribute 'get'

strVar を tk.StringVar() 変数として解釈できない理由がわかりません...何かアイデアはありますか?

4

1 に答える 1

3

イベントは、最初の引数としてコールバックに渡されます。コールバックの最初の引数はstrVarであるため、Event オブジェクトはその変数に渡されます。イベントを保持するには、引数リストの先頭に追加の引数を追加する必要がありますlambda event, strVar=strVar, i=i: self.obtain(i, strVar)

于 2014-03-13T19:01:18.670 に答える