Настройка глобального размера шрифта в kivy

каков предпочтительный способ, будь то через python или язык kivy, установить глобальный размер шрифта (т. е. для кнопок и меток) в kivy?

каков хороший способ динамического изменения глобального размера шрифта пропорционально размеру окна?

3 ответов


использовать шаблон чтобы создать пользовательскую метку:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget 
from kivy.properties import ObjectProperty, NumericProperty

kv = '''
[MyLabel@Label]:
    text: ctx.text if hasattr(ctx, 'text') else ''
    font_size: 24
    markup: True

<MyWidget>:
    id: f_wid
    BoxLayout:
        size: f_wid.size
        orientation: 'vertical'
        MyLabel:
            text: "Hello world 1"
        MyLabel:
            text: "Hello world 2"
        MyLabel:
            text: "Hello world 3"
        MyLabel:
            text: "Hello world 4"   
        MyLabel:
            text: "Hello world 1"
        MyLabel:
            text: "Hello world 2"
        MyLabel:
            text: "Hello world 3"
        MyLabel:
            text: "Hello world 4"   
'''
Builder.load_string(kv)

import kivy
kivy.require('1.7.1') # replace with your current kivy version !

from kivy.app import App
from kivy.uix.widget import Widget

class MyWidget(Widget):
    pass

class MyApp(App):
    def build(self):
        return MyWidget()

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

чтобы размер шрифта зависел от размера экрана, вместо использования фиксированных значений вычислите его с помощью self.heigh:

[MyLabel@Label]:
    text: ctx.text if hasattr(ctx, 'text') else ''
    font_size: self.height/2
    markup: True

обновление

альтернативный подход-установка переменной с использованием синтаксиса #:set:

kv = '''
#:set default_font_size "36sp"
<MyWidget>:
    id: f_wid
    BoxLayout:
        size: f_wid.size
        orientation: 'vertical'
        Label:
            text: "Hello world 1"
            font_size: default_font_size
        Label:
            text: "Hello world 2"
            font_size: default_font_size
        Label:
            text: "Hello world 3"
            font_size: default_font_size
        Label:
            text: "Hello world 4"   
            font_size: default_font_size
        Label:
            text: "Hello world 1"
            font_size: default_font_size
        Label:
            text: "Hello world 2"
            font_size: default_font_size
        Label:
            text: "Hello world 3"
            font_size: default_font_size
        Label:
            text: "Hello world 4"   
            font_size: default_font_size
'''
Builder.load_string(kv)

<Label>:
    font_size: dp(20)
    font_name: 'path/to/funcy/font.ttf'

установит имя шрифта и размер шрифта глобально для любого виджета, который использует метку как базовую (TextInput и несколько других виджетов этого не делают).


Я знаю, что этот вопрос старый, но вы спросили о "динамически изменять глобальный размер шрифта пропорционально размеру окна"

для подобной проблемы я создал AutoSizedLabel

class TestApp(App):
    def build(self):
        return AutoSizedLabel(text="crazy stuff", ratio=0.5)

это pip установка-возможность:

pip install kivyoav