2016-08-18 3 views
1

TKinter에서 만든 입력란에 입력 한 값으로 목록의 값을 업데이트하려고합니다. 예제에서 사용자는 목록에있는 사람들의 실제 이름을 입력합니다. 실제 이름이 example_list의 'x'를 대체합니다.Tkinter 입력 상자에서 목록의 값 업데이트 - Python

변수에 전역 변수를 지정했지만 변경 사항은 목록에서 반복되는 두 번째 값에만 적용됩니다. 첫 번째 값은 아래 코드에서 초기화 된 값인 99입니다.

나는 또한 i [1]을 개별적으로 업데이트하는 람다 함수를 지정하려했으나 잘못된 구문입니다. 게다가 quit() 함수가 반복을 계속하는 유일한 방법 인 것 같습니다.

이 작업을 깨끗하게 처리하고 목록의 첫 번째 항목을 업데이트 한 방법이 있습니까? tksimpledialog을 향해 나를 감독 웨인 베르너에

from Tkinter import * 

example_list = [['Jimmy Bob','x','78'],[" Bobby Jim",'x','45'] ,["Sammy Jim Bob",'x','67'] ]  #Nickname/Real Name/Age 

newValue = 99 

def replace(): 
    global newValue 
    newValue = e1.get() 
    print("Their real name is %s" %(e1.get())) 
    #return(newValue) 
    win.quit() 

root = Tk() 

for i in example_list: 

     win = Toplevel(root) 
     #win.lift()            
     e1 = Entry(win) 
     e1.grid(row=1, column=0) 

     var = StringVar() 
     var.set(i[0]) 
     Label(win, textvariable = var).grid(row=0, column=0) 

     Button(win, text='Enter Real Name', command=replace).grid(row=2, column=0, pady=4) 
     #Button(win, text='Enter Real Name', command=lambda: i[1] =replace()).grid(row=2, column=0, pady=4) 

     i[1] = newValue 

     win.mainloop() 

root.mainloop() 

for i in example_list: 
    print(i) 
+3

여기서 무엇을하려고합니까? 새로운 최상위 창을 만든 다음 종료합니다. 왜? 사용자로부터 의견을 얻으 려한다면 왜 tksimpledialog를 사용하지 않는 것이 좋을까요? –

+0

@WayneWerner 감사합니다. 너무 솔직하게 나는 이것이 선택 이었다는 것을 몰랐다. tkinter와 toplevel을위한 어린이 창구를 찾는 데 소비되는 시간이 전부였습니다. 당신의 솔루션은 제가 가지고 있던 모든 문제를 해결합니다. – alkey

답변

0

덕분에, 문제에 대한 해결책은 여기에있다.

from Tkinter import * 
import tkSimpleDialog 

example_list = [['Jimmy Bob','x','78'],[" Bobby Jim",'x','45'] ,["Sammy Jim Bob",'x','67'] ] 

root = Tk() 
root.geometry("400x400") 
Label(root, text = "Enter the names in the dialog").grid(row=0, column=0) 

for i in example_list: 
    root.lower() 
    i[1] = tkSimpleDialog.askstring('Enter their real name', 'What is %s real name' %i[0]) 
    print(i[1]) 


root.mainloop() 
+0

저는 루트 부분이 필요 없다고 확신합니다 - 'for' 루프로 충분하고 독자적으로 설 수 있습니다. –

+0

@WayneWerner 감사합니다. 네 말이 맞습니다. 필요하지 않습니다. 루트 스크린을 사용하여 더 많은 정보를 추가 할 계획 이었지만,이 질문에 대해서는 불필요한 편집을 할 것입니다. – alkey

관련 문제