【问题标题】:Setting global font size in kivy在kivy中设置全局字体大小
【发布时间】:2013-10-03 21:03:43
【问题描述】:

无论是通过 python 还是 kivy 语言,在 kivy 中设置全局字体大小(即按钮和标签)的首选方式是什么?

根据窗口大小动态更改全局字体大小设置的好方法是什么?

【问题讨论】:

    标签: python properties kivy font-size


    【解决方案1】:

    使用template 创建您的自定义标签:

    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)
    

    【讨论】:

    • 谢谢!有趣的方法。出于好奇,是否还有一种方法可以使用 kivy 自己的标签构造,而不定义新类型的对象?
    • @James_L,声明新类型没有错。无论如何,我也更新了这个答案。
    • 再次感谢。这并不是说我反对任何特定的方法。我只使用了一段时间的 kivy;学习多种做事方式有助于我更好地了解框架。
    • 很好的答案,我只是想指出 kv 模板([MyWidget@Widget] 合成器)正在被更强大的动态类( 代替,并替换为“ ctx" 与 "root"))。
    【解决方案2】:
    <Label>:
        font_size: dp(20)
        font_name: 'path/to/funcy/font.ttf'
    

    将为使用 Label 作为其基础的任何小部件全局设置字体名称和字体大小(TextInput 和其他一些小部件不这样做)。

    【讨论】:

    • 如果您将&lt;Label&gt; 替换为&lt;Widget&gt;,您的字体将成为所有其他uix.* 小部件的默认字体。
    • 字体大小应为expressed in sp, not dp。否则 +1 以获得有用的答案
    【解决方案3】:

    我知道这个问题很老,但你确实问过“根据窗口大小动态更改全局字体大小设置”

    对于类似的问题,我创建了 AutoSizedLabel

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

    它可以通过 pip 安装:

    pip install kivyoav
    

    【讨论】:

      猜你喜欢
      • 2014-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      相关资源
      最近更新 更多