2016-12-06 4 views
0

動的に作成されたウィジェットで対応するボタンを押してエントリコンテンツにアクセスするにはどうすればよいですか? 以下は私が今までに思いついた最高のものです。何か助けてくれてありがとう。Tkinterは動的に作成されたウィジェット内のエントリにボタンを割り当てます

from Tkinter import * 

class App(object): 
    def __init__(self, master): 
     self.master = master 
     self.mf = Frame(self.master) 
     self.l = ["white", "red", "blue", "brown"] 
     self.font = ("Arial", 30) 
     self.c, self.r = 1, 0 
     self.cc, self.rr = 0, 0 
     self.bel = [] 

     for c in self.l: 
      action = self.print_entry 
      self.e = Entry(self.mf, bg=c, width=10, font=self.font) 
      self.e.grid(row=self.r, column=self.c) 

      self.b = Button(self.mf, bg=c, text=c, font=self.font) 
      self.b.grid(row=self.rr, column=self.cc) 
      self.b.config(command=action) 
      self.bel.append((self.b, self.e)) 
      self.rr += 1 
      self.r += 1 

     self.mf.pack() 

    def print_entry(self): # this function prints the content of the entry 
     pass 

def main(): 
    root = Tk() 
    display = App(root) 
    root.mainloop() 
if __name__=="__main__": 
    main() 

答えて

1

lambdaまたはfunctools.partialを使用して、エントリウィジェットへの参照をコマンドに渡すことができます。たとえば:これらの変数がしか最後のボタンと最後のエントリへの参照を保持しますので、ところで

self.b.config(command= lambda entry=self.e: action(entry)) 
... 
def print_entry(self, entry): 
    print("the entry is '%s'" % entry.get()) 

、使用self.bself.eは、無意味です。ローカル変数を使用するか、またはリストに値を追加する必要があります。

+0

これは素晴らしいことです。ありがとうございました。 –

関連する問題