2011-02-24 8 views
-1

클래스 인 사용자 정의 위젯을 가져 오는 프로그램을 만들고 있습니다 (Tkinter 프레임 위젯을 상속합니다). 제가 구속력을지기 전까지는 모든 것이 훌륭합니다. 혼동을 줄이기 위해 우리는 주 애플리케이션 앱, lib에서 위젯을 가져 오는 모듈, 앱으로 가져올 위젯을 cwid라고 부를 것입니다.Python의 클래스에 대한 도움이 필요합니다.

기본적으로 어떻게 든 app에서 함수를 참조해야합니다. lib의 내 위젯에 바인딩 될 수 있습니다.

기능 내가 CWID 내에서 위젯을 결합하기 위해 노력하고있어가 element_click입니다 (함수 element_click는 응용 프로그램입니다.) :

lambda event: element_click(event, elementinfo[3]) 

그래서 요소가있다 (lib에 다음과 같이 보일 것이다 바인딩 cwid 내의 캔버스 위젯)

element.bind('<ButtonRelease-1>', lambda event: element_click(event, elementinfo[3])) 

위의 행은 app_click이 app에있는 것처럼 보이지만 작동하지 않습니다. 그래서 나는 작동하지 않는 작업을 시도했습니다.

TypeError: unbound method element_click() must be called with EOG instance as first argument (got Event instance instead) 

EOG는 element_click를 포함 응용 프로그램의 클래스입니다 :

import app 

loc = app.EOG 

element.bind('<ButtonRelease-1>', lambda event: loc.element_click(event, elementinfo[3])) 

나는 다음과 같은 오류가 위의 시도

.

또한 위 코드는 모두 스 니펫입니다.

편집 :

시도 LOC = app.EOG(), 다음과 같은 오류 이동 : 당신을 생각

AttributeError: EOG instance has no attribute '__nonzero__' 

답변

2

그냥 원하는 :

loc = app.EOG() 

그런 다음, loc EOG의 인스턴스이고 loc.element_click은 바인딩 된 메서드이므로 의도 한대로 작동합니다.

+0

감사합니다. 여전히 조금 문제가 있습니다. 편집 : – rectangletangle

+0

을 참조하십시오. 나는 너에게 더 많은 문맥이 필요하다고 생각해. 배경으로 ['__nonzero__'] (http://docs.python.org/reference/datamodel.html#object.__nonzero__)는 객체를 부울로 변환하는 데 사용되는 특별한 방법입니다. –

+0

죄송합니다, 내 코드에서 실수를 발견. 어쨌든 도움을 주셔서 감사합니다. – rectangletangle

관련 문제