在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] 合成器)正在被更强大的动态类(<Label>:
font_size: dp(20)
font_name: 'path/to/funcy/font.ttf'
将为使用 Label 作为其基础的任何小部件全局设置字体名称和字体大小(TextInput 和其他一些小部件不这样做)。
【讨论】:
如果您将<Label>
替换为<Widget>
,您的字体将成为所有其他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中设置全局字体大小的主要内容,如果未能解决你的问题,请参考以下文章