2017-03-13 26 views
0

ヘッダボディで構成されるMyWidgetというカスタムウィジェットを作成したいとします。動的タイプのkivyウィジェット

時には、ヘッダはすなわちラベルとボックスのレイアウト、次のようになります。その場合には、

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

しかしTabbedPanelにおけるこれらのいくつかのグループに私が欲しいの回で、 MyWidgetはのように振る舞う必要があります。

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

であること、はMyWidgetはMyWiで検出することができ、その親(Tabbedpanelまたは何か他)、誰であるかに応じて、異なるものでなければなりませんdget.on_parent

TabbedpanelItemとBoxLayoutの2つの異なるウィジェットMyWidget_TabbedとMyWidget_individualを定義するのが標準的な方法ですが、概念的にはこれらの2つは実際には同じです。グループ化されているかグループ化されていない

これを行うには?

私は、MyWidgetGrouped(TabbedPanelItem)、MyWidgetUngrouped(BoxLayout)、MyWidgetの3つのクラスについて考えています。 KVでMyWidgetのみが使用されます。次に、mywidget.on_parentでは、mywidget.__ class__をMyWidgetGroupedまたはMyWidgetUngroupedに変更します(おそらく、__init__を呼び出して__dict__などを設定する必要があります)

答えて

0

まず、2つのオブジェクトが同じであることを意味するわけではありません。 BoxLayoutTabbedPanelItemのインタフェース(契約)は異なります。彼らが同じように見えるかもしれないという理由だけで、それらは同じではありません。あなたはこれと同じように2つの異なるクラスを使用する必要があります異なる

は今、あなたの質問に:あなたはBoxLayoutTabbedPanelItemの両方を継承することができるように

Pythonの多重継承をサポートしています。

ウィジェットに関するkivyの内部作業についてはわかりませんが、これはうまくいかないかもしれません。

しかし、説明した方法で.kvファイルから2つのレイアウトを読み込むことはできません。これを達成するには、Builder.load_stringまたはBuilder.load_fileのようなものを使用する必要があります。

+0

こんにちは!回答ありがとうございます。私は複数の継承を試みましたが、それを動作させることはできませんでした。私は質問を編集して、見てみましょう –

関連する問題