2016-11-02 2 views
0

나는 tkinter를 사용하여 GUI를 작성하고 있으며 Button 위젯과 함께 인라인 위젯으로 구성된 여러 줄을 가지고있다. 버튼을 누르면 콜백이 askdirectory 대화 상자를 열고 선택된 디렉토리는 클릭 한 버튼과 같은 줄에서 항목 위젯에 기록됩니다.목록의 색인을 단추의 콜백에 전달하는 방법은 무엇입니까?

은 복사/12 번 코드를 붙여 넣보다 더 우아한 해결책에 도착하기 위해, 나는 쓴 다음

for i in range (0,12): 
     e[i] = Entry(master) 
     e[i].insert(0, "<Choose a directory...>") 
     e[i].config(width=70) 
     e[i].grid(row=i+2, column=0, sticky=NW, columnspan=2) 
     b[i] = Button(master, text="Choose directory", command=lambda: self.getDir(e[i])) 
     b[i].grid(row=i+2, column=2, sticky=N) 

그리고 콜백 함수 :

def getDir(self, e): 
    '''Retrieve directory and write it on the right "Entry" widget''' 
    dirName = askdirectory(title='Choose a directory:') 
    e.delete(0, END) 
    e.insert(0, dirName) 

을 내가 스크립트를 실행하면 "list index out of range" 오류가 발생합니다.

코드에서 나중에 사용되는 i은 더 이상 색인이 아니기 때문에 단추를 만드는 순간에만 사용할 수 있습니다. 맞습니까?

그래서 어떤 버튼을 클릭했는지, 그리고 어떤 항목을 쓸 것인지 콜백에 알리려면 어떻게해야합니까?

+0

인덱스가 아닌 함수에 항목을 전달해야하는 것처럼 보이지만, 당신이 통과하길 원합니다. –

+0

@ 브라이언 오클리 - 좋은 발견. 나는 새로운 것을 배웠다. – CAB

답변

-1

오류 메시지를 게시하지 않았기 때문에 나는 추측 할 수 있습니다. 은 단순히 e와 b의 길이가 될 수 있습니다! e와 b는 적어도 12의 길이와 함께 목록이나 튜플이 될 필요가 있습니다 ... 아니면 그냥 12 번 코드를 처리하고 싶다면 [i]가 전혀 필요 없습니다. 나는 이것을 코멘트로 올렸지 만, 그렇게할만한 포인트가 없다. (

관련 문제