2014-04-27 5 views
0

각 행렬에 고유 한 StringVar이 첨부 된 행렬을 저장합니다. StringVar에 대한 콜백에서 나는 행렬을 기준으로 어느 것이 StringVar인지를 알 수 있기를 원합니다. 이것은 내가 무엇을 가지고 :고유 식별자가있는 StringVar 콜백?

def callback(sv, index):  
     print index 

    for i in range(ncols): 
     for j in range(self.nrows): 
      sv = StringVar() 
      uniqueId = str(i)+str(j) 
      sv.trace("w", lambda name, index, mode, sv=sv: callback(sv, uniqueId)) 
      self.results[i][j] = Entry(gridtable,textvariable=sv,bg='grey',borderwidth=1,fg='black',width=self.widget_width).grid(row=j+2,column=i+1,sticky='ew') 

그러나, 항상 인쇄 같은 인덱스 ('718'- '7'+ '18'이다 : 값이 i와 j 정류장에서). 이 StringVars에 대한 고유 식별자는 어떻게 얻을 수 있습니까?

답변

3

코드에서 변수가 변경되고 있지만 uniqueID은 마지막 값에서 멈추고 있습니다. 다음과 같이 람다 표현식에 루프의 반복에 대한 값을 기억하도록 설정할 수 있습니다.

from Tkinter import * 

def callback(var, index): 
    print var, index 

root = Tk() 

for i in range(10): 
    var = StringVar() 
    uniqueID = i 
    var.trace('w', lambda name,index,mode, var=var, uniqueID=uniqueID: callback(var, uniqueID)) 
    Entry(root, textvariable=var).pack() 

mainloop() 
+0

고마워요! 그건 완벽합니다. 이 경우에 람다가 무엇을하는지 설명 할 수 있습니까? 다른 말로하면이 문제는 어떻게 해결 될까요? – Adam

+2

'var = var'과'ID = ID'를 추가함으로써 인자가 생성 될 때 인자에 기본값을 할당합니다. 기본값이 없다면,'trace' 메쏘드는 현재 값인'uniqueID'를 가진 명령을 호출합니다. 이것은 마지막 값이 될 것입니다. – atlasologist

+0

우수. 다시 감사합니다 – Adam