2014-12-09 2 views
0

레이블에 일부 서식을 사용하여 여러 개의 StringVar() 값을 표시하고 싶습니다.동일한 콜백 함수를 사용하여 여러 변수를 추적하는 방법은 무엇입니까?

import tkinter as tk 

keys = range(2) # 2 for simplicity 

root = tk.Tk() 
myVars = {key: tk.StringVar() for key in range(5)} 
myStrVars = {key: tk.StringVar() for key in range(5)} 

def callback0(*args): 
    blah = '{0:.3f}'.format(float(myVars[0].get())) 
    myStrVars[0].set(blah) 

def callback1(*args): 
    blah = '{0:.3f}'.format(float(myVars[1].get())) 
    myStrVars[1].set(blah) 
#etc... 

myCallbacks = {0: callback0, 
       1: callback1} 
       #etc... 

for key in keys: 
    myVars[key].trace('w', myCallbacks[key]) 
    tk.Entry(root, textvariable=myVars[key]).pack() 
    label = tk.Label(root, textvariable=myStrVars[key]).pack() 

root.mainloop() 

추적 할 각 변수에 대해 쓸 필요가 없도록 콜백 함수를 작성하는 방법이 있습니까?

답변

1

키와 입력을 기능으로 보낼 수 있습니다. 이것은 잘라 버린 버전이며 코드와 약간 다르지만 내가 원하는 것이라고 생각합니다.

import tkinter as tk 
from functools import partial 

def callback(key, var, *args): 
    print "callback var =", key, var.get() 
    ##myStrVars[key].set(var[-1]) 

root = tk.Tk() 

for key in range(5): 
    var = tk.StringVar() 
    var.trace('w', partial(callback, key, var)) 
    tk.Entry(root, textvariable=var).pack() 

root.mainloop() 
+0

감사합니다. '부분적인'부분이 존재하지 않습니다. – izxle