リスト形式で保存された一連のデータから、tkinter でいくつかのボタンを動的に構築しようとしています。うまくいかないのは、コールバック関数に引数を入れる方法です。コールバックのコードはコールバックの時間まで実行されないため、コールバックで使用される変数はこの時点で値が変更されています。
コードの(非常に)簡略化されたバージョンは次のとおりです。
from Tkinter import *
from ttk import *
mylist = ['a','b','c','d','e']
class App:
def __init__(self, master):
self.frame = Frame(master)
self.frame.pack()
for i in range (0,len(mylist)):
setattr(self, 'button' + str(i), Button(self.frame, text=mylist[i], command= lambda: self.buttoncall(i)))
getattr(self, 'button' + str(i)).pack(side=LEFT)
def buttoncall(self,input):
print mylist[input]
root = Tk()
app = App(root)
root.mainloop()