2017-03-13 1 views
0

헤더본문으로 구성된 MyWidget을 만들고 싶습니다.동적 유형의 kivy 위젯

때로는 헤더는 라벨과 상자 레이아웃이 될 것 즉 :

<[email protected]>: 
    Label: 
     id: header 
     text: "Title" 
    BoxLayout: 
     id: body 

그러나 TabbedPanel에서 이러한 여러 그룹에 내가 원하는 시간, 경우에

, MyWidget은 행동해야 : MyWi로 검출 할 수 부모 (A Tabbedpanel 또는 다른 것), 누구입니다

<[email protected]>: 
    text: "Title" 
    BoxLayout: 
     id: body 

는 MyWidget가에 따라 다른 것이어야한다 dget.on_parent

TabbedpanelItem 및 BoxLayout 유형의 서로 다른 두 위젯 인 MyWidget_Tabbed 및 MyWidget_individual을 정의하는 것이 표준 방법은 알고 있지만 개념적으로이 두 가지는 실제로 동일합니다. 그룹화되었거나 그룹 해제되어 있습니다.

어떻게해야합니까?

MyWidgetGrouped (TabbedPanelItem), MyWidgetUngrouped (BoxLayout) 및 MyWidget의 3 가지 클래스가 있다고 생각합니다. KV에서 MyWidget 만 사용됩니다. 그런 다음 mywidget.on_parent에서 mywidget .__ class__을 MyWidgetGrouped 또는 MyWidgetUngrouped로 변경합니다 (그리고 아마도 __init__을 호출하고 __dict__ 및 기타 사항을 설정해야합니다)

답변

0

우선 2 개체가 동일하다는 것은 그들이 동일하다는 것을 의미하지는 않습니다. BoxLayoutTabbedPanelItem의 인터페이스 (계약)가 다릅니다. 똑같이 보일 수도 있기 때문에 똑같이 만들지 않습니다. 당신 다른와 같이 이것을 위해 2 개의 다른 클래스를 사용해야합니다. 귀하의 질문에 이제

:

파이썬 지원 다중 상속하면 상속 할 수 있도록 모두 BoxLayoutTabbedPanelItem.

위젯과 관련된 kivy의 내부 작업에 대해 알지 못합니다. 작동하지 않을 수도 있습니다.

그러나 설명 된대로 .kv 파일에서 두 가지 레이아웃을로드 할 수 없습니다. 이 작업을 수행하려면 Builder.load_string 또는 Builder.load_file과 같은 것을 사용해야합니다.

+0

안녕하세요! 대답 해줘서 고마워. 여러 상속을 시도했지만 작동하지 못했습니다. 질문을 수정하고 살펴 봅니다. –