2017-12-19 94 views
-2

すべての電話機の画面に合うようにフォントサイズまたはラベルサイズを設定するにはどうすればよいですか? (境界、長方形、または画面と重なっていない手段でフィット)(Kivy)すべてのデバイスにフィットするようにフォントサイズまたはラベルサイズを設定する方法

私はボタンとKivyの他のウィジェットがsize_hintであることを知っています。このsize_hintは望ましい結果を与えません。

また、font_sizeを設定することはできますが、これを使用して自動化するのは難しくなります。今すぐ近い解決策はWindow.sizecmに設定して取得し、font_sizecmに使用してください。

ありがとうございます。

答えて

1

これは実際には興味深い質問です。

通常、テキスト、フォント、フォントサイズ、およびレンダラーにテキスト(text_sizeのkivyラベル)を制限し、そこからいくらかのサイズのテクスチャを取得する領域を渡します。あなたが望むものは、フォントサイズを得るためにラベルのテクスチャサイズを知ることです。理論的には可能ですが、Kivyではすべての計算を手動で行う必要があります。

回避策を講じてもいいですか?フォントサイズを計算するのではなく、いくつかの非常に大きなものを使用して、最終的なテクスチャをスケールして、指定されたサイズに合わせることができます。例えば、KivyのImageウィジェットを使って、配給維持によるスケーリングを簡単に行うことができます。実証実験(Python 3):

from kivy.app import App 
from kivy.lang import Builder 
from kivy.properties import StringProperty 
from kivy.uix.boxlayout import BoxLayout 
from kivy.uix.image import Image 
from kivy.uix.label import Label 


class MyLabel(Image): 
    text = StringProperty('') 

    def on_text(self, *_): 
     # Just get large texture: 
     l = Label(text=self.text) 
     l.font_size = '1000dp' # something that'll give texture bigger than phone's screen size 
     l.texture_update() 
     # Set it to image, it'll be scaled to image size automatically: 
     self.texture = l.texture 


class RootWidget(BoxLayout): 
    pass 


class TestApp(App): 
    def build(self): 
     return MyLabel(text='Test test test') 


if __name__ == '__main__': 
    TestApp().run() 

理想から離れていますが、仕事はありません。

結果:

enter image description here

enter image description here

+0

おかげで、これはアウト・オブ・ボックスです。私はPython 2で同じコンセプトを試しましたが、動作していないように見えました。私のコードは投稿にあります。あなたのもの: 'on_text'または' on_texture'ですか? – Arief

+1

@簡単なコードはありません。私はちょうどチェックして、それはPython 2でも動作します - 何も変更せずに。 'on_text' - クラス' Image'のメンバーではありませんが、 'text'プロパティが変更されたときに自動的に呼び出される関数です。詳細は、この[link](https://kivy.org/docs/api-kivy.properties.html#observe-using-on-propname)を参照してください。 –

関連する問題