DTErrorBar という 1 つのカスタム ウィジェットを使用してサンプル レイアウトを作成しました。
<DTErrorBar>:
RelativeLayout:
size_hint: None, None
size: 20, 450
canvas:
Color:
rgba: col_fg
Line:
points: 10, 10, 10, 410
width: 4
Color:
hsv: col_gn_marker_hsla
Line:
points: 10, 10, 10, 410
width: 2
私の例では、このウィジェットは次のような BoxLayout に含まれています。
BoxLayout:
orientation: "horizontal"
DTErrorBar:
Button:
Button:
DTErrorBar:
しかし、boxLayout内にあるボタンや他のDTErrorBarとスタックすることはできません。これが私が得ているものです:
そして、これは私が期待するものです:
さて、どうやって期待したイメージを手に入れたのでしょうか? カスタム ウィジェットを使用するコードに小さな変更を加えて作成されました。
BoxLayout:
orientation: "vertical"
BoxLayout:
orientation: "horizontal"
RelativeLayout:
DTErrorBar:
Button:
Button:
RelativeLayout:
DTErrorBar:
したがって、DTErrorBar ウィジェットを RelativeLayout 内にラップすると機能するように見えますが、DTErrorBar ウィジェット内のすべてのラッパーとして RelativeLayout が既にある場合、その理由はわかりません。
要約すると、予想される動作を得るために DTErrorBar の定義に何をする必要がありますか? 私の過ちから学ぶために、ここで何が間違っているのかを誰かが説明できれば興味深いでしょう、ありがとう。
予期しない場合の完全なコード: https://gist.github.com/payala/bc54f4d3d2378a97c26c9afe88858b07
予想外の場合の完全なコード: https://gist.github.com/payala/9de4de166c7c1942cc923c32550bf661
編集:jligezaの回答後の変更
Python 側では、DTErrorBar クラスは次のように宣言されています。
class DTErrorBar(Widget):
pass
基本Widgetクラスから派生したカスタム ウィジェットを作成していました。Layout クラスから継承するように変更すると解決しました。
class DTErrorBar(RelativeLayout):
pass
これを行うと、ウィジェット自体が RelativeLayout であるため、ウィジェット定義内に RelativeLayout を含める意味がなくなり、最終的なウィジェット定義コードは次のようになります。
<DTErrorBar>:
size_hint: None, None
size: 20, 450
canvas:
Color:
rgba: col_fg
Line:
points: 10, 10, 10, 410
width: 4
Color:
hsv: col_gn_marker_hsla
Line:
points: 10, 10, 10, 410
width: 2