実際のテキストは、デフォルトでラベル サイズに結合されていないサイズの Rectangle に表示されます。テキストの量が多い場合、これは大きくなり、ラベルの境界を超える可能性がありますが、ラベルのサイズは変更されません。
表示されるテキストの実際のサイズを制御する関連プロパティは ですLabel.text_size
。必要な動作を得るには、次のようにするだけです。
ScrollView:
size_hint: (1, 0.5)
Label:
size_hint: (1, None)
height: self.text_size[1]
これにより、表示されるテキストの高さを追跡するようにラベルの高さがバインドされるため、必要な動作が得られます。
補足として、多くの場合、 を変更または監視すると便利ですtext_size
。たとえば、手動の改行に頼るのではなく、ラベルの端でtext_size: self.size
テキストを折り返すようにするには、幅がラベルの幅を超える場合にテキストが自動的に折り返されることを意味するように設定できます。これは、ラベル自体ではなく、テクスチャ内のテキスト位置を制御する halign または valign を使用する場合にも重要です。これらのプロパティは、手動で text_size を実際のテキストのスペースよりも大きな値に (再び) 設定しない限り、目に見える効果はありません。取り上げます。
編集:以下のコメントに従って、これは私のアプリの 1 つのラベルの例です。テキストの長さが長くなると (ユーザーがスクロールできるように) 垂直方向に成長しますが、幅がラベルよりも大きい場合はテキストを自動的に折り返します幅。Label を GridLayout に配置することで実際にこれを行ったようですが、これは何らかの理由で重要だったことをぼんやりと覚えています。
GridLayout:
cols: 1
spacing: 10
size_hint_y: None
height: thetb.texture_size[1]
Label:
id: thetb
text: 'whatever'
text_size: self.width, None
size_hint: (1, None)
size: self.parent.width, self.texture_size[1]
text_size を使用してテキスト バウンディング ボックスを制御していることがわかりますが (ラベルの端で折り返されます)、実際には GridLayout の高さをバインドして texture_size の高さを追跡しています。GridLayout は ScrollView に配置され、私が望む動作を正確に取得します。