LoginSignup
5
4

More than 5 years have passed since last update.

Labelのtext_size属性

Last updated at Posted at 2016-10-30

自分がKivyを始めた頃このtext_sizeに躓いたので、記事にしました。

そもそもtext_sizeとは?

Labelにはfont_size属性というのもあります。英語の意味的にこれとほとんど一緒じゃない?と思ってしまう属性名です。font_sizeは文字の大きさですが、text_sizeは...内部で作られるtextureのサイズを固定する為に使うものです。

内部で作られるtextureとは?

これはLabelに表示する文字列が描画されたものです

固定するとどうなるか

サイズの固定は"幅と高さ"それぞれ個別に設定できます。仮に幅を固定したとして文字列がその幅に収まらない時は自動で折り返されます。高さを固定した上で文字列が収まらない時は、その収まらない部分は無くなります。

固定しないとどうなるか

しないとLabelは文字列の描画に必要なだけ大きなtextureを作ります。この時自身の大きさを超えていても関係ありません。好きなだけ大きなtextureを作り、そして自身の領域を超えて他のWidgetの領域にまで描画します。余談ですがこのWidgetの描画が自身の領域に制限されていないのはKivyの特徴の一つですね。

将来 属性名が変わるかもしれない

Kivy 2.0 api breaksのページには以下の記述があります。

text_size might be more clearly named text_bounding_box or similar. Users often confuse it with font_size.

海外の人にとってもtext_sizeは分かりにくい名前のようです。

何に使うのか?

一つ思いつくのは長文を表示する時です。
幅だけを固定して文章を折り返させ、縦にはみ出た分はユーザーにスクロールさせて読ませます。

実際にやってみる

from kivy.lang import Builder
from kivy.base import runTouchApp

root = Builder.load_string(r'''
ScrollView:
    do_scroll_x: False
    do_scroll_y: True
    bar_width: 4
    Label:
        text: r'Sample Text ' * 100
        font_size: 30
        size_hint_x: 1.0
        size_hint_y: None
        text_size: self.width, None  # 内部のtextureの幅を自身の幅に合わせる。高さは固定しない(None)。
        height: self.texture_size[1]  # 自身の高さを内部のtextureの高さに合わせる
''')
runTouchApp(root)

結果

Screenshot at 2016-10-30 16:07:48.png
動画

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4