2016-04-09 6 views
0

KivyのTextInputのラインラップ関数を実装したいと思います。私はラップ関数内にLabelを作成していて、そのテクスチャサイズをチェックして、行に折り返しが必要かどうかを確認しています。ただし、texture_sizeプロパティはテキストにかかわらず[0,0]を返します。しかし、ボタンが正しい値を出力し、Kivyのラベルのtexture_sizeプロパティへのアクセス

from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.button import Button 
from kivy.uix.boxlayout import BoxLayout 

from kivy.app import App 
from kivy.uix.label import Label 
from kivy.uix.button import Button 

class Test(App): 
    def build(self): 
     def f(a): 
      print(l.texture_size) 
     l = Label(text="Random text") 
     t = Button(on_press = f) 
     print(l.texture_size) 
     return t 

Test().run() 

texture_size戻り[0,0]build方法から印刷するとき:だから私は調査するために一緒に少しテストコードを入れています。私の場合、ボタンはオプションではありません。Labelを作成し、そのテクスチャサイズを取得して削除したいと思います。たぶん、特定のフォントのピクセル単位でテキストサイズを判断する良い方法がありますか?または、そうでない場合は、buildメソッドで正しい値が印刷されないのはなぜですか? textプロパティを設定した後、あなたがコアラベルを更新し、そのテクスチャサイズを確認する必要が

+0

テキストをテクスチャに実際にレンダリングするために使用される内部クラスがあります。私はそれ(おそらくkivy.core.text.something)を見つけてレンダリングに使用し、テクスチャサイズをチェックします。テクスチャがすぐに作成されない場合は、タイミングの問題に遭遇している可能性があります。 – inclement

答えて

2

my_label = Label() 
my_label.text = 'hello' 
my_label._label.refresh() 
print my_label._label.texture.size 
>>> (33, 18) 

my_label.text = 'goodbye' 
my_label._label.refresh() 
print my_label._label.texture.size 
>>> (57, 18) 

が、これは保護された属性にアクセスし、その保証は、このAPIが残ることをなされないことに注意してください将来のバージョンで一貫しています。

また、最近PR to add text wrapping support for long linesTextInputにマージしました。 development version of Kivyを試して、必要なものがあるかどうかを確認してください。

関連する問題