如何设置字体大小或标签大小以适合所有设备

6 python python-2.7 kivy

如何设置 kivy 字体大小或标签大小,使其适合所有手机设备屏幕?(适合的方式是不与边界、矩形、甚至屏幕重叠)

我知道 Kivy 中的按钮和其他一些小部件有size_hint. 这size_hint没有给出期望的结果。

另外,设置font_size可以解决这个问题,但很难自动化使用它。现在关闭的解决方案是通过设置和获取Window.sizein cm,并使用font_sizein cm

提前致谢。

Mik*_*mov 8

这实际上是一个有趣的问题。

通常,您将限制文本(text_size在 kivy 标签中)的文本、字体、字体大小和区域传递给渲染器,并从中获取某种大小的纹理。您想要的是了解标签的纹理大小以获得字体大小。我想这在理论上是可能的,但是你需要在 Kivy 中手动完成所有计算。

我们可以做一些解决方法吗?我们可以使用一些非常大的字体并缩放最终纹理以匹配给定的大小,而不是尝试计算字体大小。Image例如,可以使用 Kivy 的小部件轻松完成配给保持的扩展。概念验证 (Python 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()
Run Code Online (Sandbox Code Playgroud)

远非理想,但确实有效。

结果:

在此输入图像描述

在此输入图像描述


小智 7

为了在调整窗口大小时缩放按钮或标签的字体,我在 kv 文件中使用font_size 并将self.width除以某个数字:

Label:
            size_hint: 1, 0.1
            text: "Some label text"
            font_size: self.width/20
Run Code Online (Sandbox Code Playgroud)