在kivy中设置全局字体大小

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案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

【讨论】:

以上是关于在kivy中设置全局字体大小的主要内容,如果未能解决你的问题,请参考以下文章

如何在summernote中设置自定义字体大小列表?

如何在 CSS 中设置最小字体大小

在 html 中设置极小的字体大小

Java - 在 JEditorPane 中设置选择的字体大小?

iphone:如何在 webView 中设置字体大小?

PyCharm中设置菜单字体大小