2011-12-19 2 views
1

나는 tk를 정말 좋아하지만, 내가 가지고있는 한 가지 문제점은 모든 위젯들을 깨끗하게 관리하는 방법이다. 20 개의 위젯을 만들면 20 개의 변수가 있거나 대개 내가 저장 한 해시를 만듭니다.Tk 위젯을 관리 하시겠습니까?

parent = TkObject.new(TkRoot.new) 
parent.add("MAIN_FRAME", TkFrame.new.pack) 
parent.child("MAIN_FRAME").add("SUBMIT", TkButton.new(:text => "Submit").pack) 

내가 찾을이 유지 : 최근에, 나는 프레임처럼 부모 객체를 생성하고,이 같은 기본적으로 보이는 그것에 자식 위젯을 추가 할 수 있습니다 부모/자식 관계가있는 클래스를 생성 정리 된 것들이지만 위젯에 액세스하려면 정말 긴 문자열로 끝납니다. 나는 이것을하기위한 더 좋은 방법이 있는지, 그리고 위에서 언급 한 반에서 휠을 재발 명하려는 경우에 노력하고있다.

답변

0

Tk의 위젯 내부 이름은 매우 비슷하지만 매우 유용한 솔루션은 "흥미로운"위젯 (일반적으로 해시)의 핸들 만 유지하는 것입니다. '당신이 경우, 물론

$thing->{submit}->invoke(); 

: 직접 (펄 구문 때문에) 흥미로운 부분 참조 할 수 있도록 다음 당신은 그냥 프로그램의 개체로 그 해시에 대한 핸들 것을 사용 특히 객체 구현 외부에서 객체에 많이 액세스하면 객체를 돌보기위한 메서드를 만들어야합니다. 그것은 약간의 성능 비용을 추가하지만, 일을 훨씬 더 깨끗하게 유지합니다 (Demeter의 법칙과 그 모든 것).

이 모든 것을 처리하기위한 모든 트릭은 바다에서 수영과 같은 모든 복잡성을 처리하는 것입니다. 당신이 표면 위에서 수영 만하는 한, 물의 깊이는 중요하지 않습니다. (당신이 정말로 중첩의 엄청난 양을 필요로하는 경우, 당신은 아마 잘못하고있어,. GUI를 대부분 일 더 나은 그들이 매우 중첩 없을 때)

+0

감사합니다, 그것은 거의 내가 할거야. 나는 더 깨끗한 방법이 있기를 바라고 있었다. 나는 또한 FXruby를 시도하고있다. 그러나 이것은이 점에서 더 좋을 것 같지 않다. –

+0

@Eric : 실제로는 꽤 깨끗합니다. Perl (또는 Ruby)의 의미에 비추어 볼 때 훨씬 더 깨끗한 것이 무엇인지 생각해 내기 란 매우 어렵습니다. 개체 핸들은 _ 어딘가에 있어야합니다. –

관련 문제