2017-12-19 1 views
-2

모든 전화 장치 화면에 맞게 kivy 글꼴 크기 또는 레이블 크기를 설정하는 방법은 무엇입니까? (경계, 사각형 또는 화면과 겹치지 않는 방법으로 끼워 넣기)(Kivy) 모든 장치에 맞게 글꼴 크기 또는 레이블 크기를 설정하는 방법

Kivy의 버튼과 다른 위젯에는 size_hint이 있습니다. 이 size_hint은 원하는 결과를 제공하지 않습니다.

또한 font_size을 설정하면 트릭을 수행 할 수 있지만이를 사용하여 자동화하는 것은 어렵습니다. 이제 가까운 해결책은 Window.sizecm으로 설정하고 가져와 font_sizecm에 사용하는 것입니다.

미리 감사드립니다.

답변

1

이것은 실제로 흥미로운 질문입니다.

보통 텍스트, 글꼴, 글꼴 크기 및 렌더러로 텍스트 (text_size)를 제한하고이를 일부 크기의 텍스처로 가져 오는 영역을 전달합니다. 원하는 것은 글꼴 크기를 얻기 위해 레이블의 텍스처 크기를 아는 것입니다. 이론적으로는 가능하지만 Kivy에서 모든 계산을 수동으로 수행해야합니다.

몇 가지 해결 방법을 사용할 수 있습니까? 글꼴 크기를 계산하는 대신 크기가 큰 일부 텍스처를 사용하여 주어진 크기와 일치시킬 수 있습니다. 예를 들어, Kivy의 Image 위젯을 사용하면 배급을 유지하면서 규모를 조정할 수 있습니다. 개념 증명 (파이썬 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

덕분에,이 아웃 오브 박스입니다. 파이썬 2에서 같은 개념을 시도했는데 작동하지 않는 것처럼 보였습니다. 내 코드가 게시물에 있습니다. 너의 것 :'on_text' 또는'on_texture'? – Arief

+1

@A 간단한 코드가 정확하지 않습니다. 방금 확인한 바 파이썬 2에서도 아무런 변화없이 작동 할 것입니다. 'on_text'는'Image' 클래스의 일부 멤버가 아니지만'text' 속성이 변경 될 때 자동으로 호출되는 함수입니다. 자세한 내용은이 [link] (https://kivy.org/docs/api-kivy.properties.html#observe-using-on-propname)을 참조하십시오. –

관련 문제