2014-02-09 2 views
1

을 통과하는 것은 이상한 일이 : 말, 당신은 tk.Button (RUN)이 클래스 내부와 당신은파이썬 Tkinter의리스트 박스 콜백 : 여기에 클래스 인스턴스 특정 콜백

self.RUN["command"] = self.run 
처럼 콜백을 지정할 수 있습니다

이것은 클래스 내의 모든 멤버에 액세스 할 수있는 함수를 나타냅니다. 본질적으로 콜백은 클래스 인스턴스를 봅니다.

tk.ListBox를 만들 수도 있습니다. 선택을 얻는 기계에는 사건이 포함됩니다. 위와 같이 class-instance-function을 전달할 수 없습니다. 콜백은 Tk에서 불투명 한 이벤트/위젯 만 볼 수 있습니다.

당신은

def CurSelect(evt) : 
    ... 
lb.bind('<<ListboxSelect>>',CurSelect) 

을 할 수 있지만 이벤트보다 더 통과 할 수있는 방법은 없습니다.

그래서 메인 루프에서 여러 개의 ListBox를 실행하면 어떻게됩니까? 어떻게 이벤트/위젯을 이벤트/위젯을 소유하고있는 클래스 인스턴스에 매핑 할 수 있습니까?

물론 일부 글로벌지도를 만들 수 있습니다. (못생긴, 노력, 나는 그것을 싫어한다.) 더 좋은 점이 있습니까?

+0

구체적 답변을 위해 실제 코드를 추가하십시오. – martineau

답변

4

람다를 사용하여 인수를 전달하려고 할 수 있습니다.

arguments = [] 
widget.bind("<>", lambda event, arg=arguments: cur_select(event, arg)) 

def cur_select(event, arg): 
    return 

또한 파이썬 함수의 이름 지정 규칙 : 가독성을 높이기 위해 필요에 따라 밑줄로 구분 된 소문자.

+0

감사합니다. 예, 작동합니다. 사실, 나는 나 자신을 알아 냈다. (저는 파이썬을 처음 접했고 자연스럽게 나오지 않았습니다.) – user3288731