2012-07-15 5 views
0

최상위 창 또는 루트와 관련하여 처리기를 실행하는 버튼이있는 경우 다른 최상위 위젯을 수정할 수 있습니까? 이 작업을 수행하는 표준 방법은 무엇입니까?Tkinter toplevel communication

답변

1

나는 Tkinter에서 경험이 없지만 PyQt4와 다르지 않을 것이라고 확신한다. 일반적으로 상위 하위 관계가 필요합니다. 상위 위젯은 하위 위젯을 포함하며이를 수정할 수 있습니다. 아이들은 대개 부모에 대해 많이 알지 못하고 신호 나 사건을 통해 의사 소통을해야합니다.

핸들러가 실행되면, 알고있는 위젯을 자유롭게 수정할 수 있어야합니다. 즉, 최상위 창에 10 개의 위젯이 있고 메소드로 핸들러가 포함되어있는 경우 메소드는 self 속성을 통해 10 개의 위젯을 수정할 수 있어야합니다. 같은

뭔가 :

class MyTopWindow: 

    def __init__(self): 
     self.widget1 = Widget 
     self.widget2 = Widget 
     self.button = Button 

     #self.button.clicked -> self.handler 

    def handler(self): 
     self.widget1.someAttribute = 1 

button.click() # -> handler() 

당신은 위젯의 내부에 위젯을 구축하는 성분을 사용한다. 당신이 피해야 할 것은 그것이 정말로 소유하고 있지 않은 글로벌 위젯을 참조하는 핸들러입니다.

+0

잘 생각해 보면 대답입니다. 아마도 올바른 대답 일 것입니다. 내가 정말로해서는 안되는 질문에 답하려고합니다. – MKaras

+0

큰 질문이 아닙니다. 구조의 맨 위에 "메시징"이라는 추상 레이어가있을 때 혼란 스러울 수 있습니다. – jdi

0

예, 버튼 (또는 이벤트)의 핸들러는 다른 최상위 레벨의 위젯을 수정할 수 있습니다. 해당 핸들러가 위젯에 대한 참조를 가지고있는 한 핸들러는이를 수정할 수 있습니다. 그런 측면에서 제한이 없습니다.