1

リスト形式で保存された一連のデータから、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()
4

1 に答える 1