2014-06-18 5 views
1

비용, 가격, isObsolete 등의 속성 목록을 얻었습니다. 사용자가 삽입 할 항목 필드가있는 레이블로 동적으로 생성하고 싶습니다. 올바른 값을 입력하십시오.Tkinter를 사용하여 동적으로 생성 된 입력 필드 값 얻기

이 작업을 수행하는 가장 좋은 방법은 사전의 값에 대한 특성을 저장하고 항목 필드가 업데이트 될 때마다이 사전을 업데이트하는 것입니다.

내 입력 필드에 지정된 StringVar에 trace_variable 함수를 사용해 보았지만 입력란에 (테스트로) 입력하거나 클래스에서 함수를 실행할 때 보이지 않습니다. 사전의 키와 값 :

from Tkinter import * 
import ttk 

t = ['cost','price','isObsolete'] 

root = Tk() 

rowAcc = 1 
colAcc = 0 

d = {} 

for item in t: 
    newValue = StringVar() 

    def callback(*args): 
     print args[0] + " variable changed to " + newValue.get() 
     d[item] = newValue.get() 

    newValue.trace_variable("w", callback) 

    ttk.Label(root, text=item).grid(column=colAcc, row=rowAcc, sticky=(N, W)) 

    reqEntry = ttk.Entry(root, textvariable=newValue, width=19) 
    reqEntry.grid(column=colAcc, row=rowAcc + 1, sticky=(N, W), pady=3, padx=1) 

    colAcc += 1 

def printDict(): 
    for key in d: 
     print key, d[key] 

root.mainloop() 

이 내 결과를 얻기 위해 조정의 방법이 있나요, 또는 더 나은 솔루션은 동적으로 생성 된 입력 필드의 값을 얻는 데 모두가?

배열의

답변

2

저장 StringVar

from Tkinter import * 

master = Tk() 

frame = Frame(master) 
frame.pack() 

s_vars = [] 

for i in range(5): 
    s_vars.append(StringVar()) 

    def onChange(a ,b, c, s_var): 
     print a, "changed to", s_var.get() 

    s_vars[i].trace('w', lambda a, b, c, x=i: onChange(a, b, c, s_vars[x])) 

    en = Entry(frame, textvariable=s_vars[i]) 
    en.pack() 

    s_vars[i].set(str(i)) 

mainloop() 
관련 문제