有没有办法创建一个 kivy 标签,根据它有多少个字符来改变字体大小

Is there a way to create a kivy label that changes the font size based on how many characters it has

因此,如果标签上只有三个字符,那么字体大小会非常大,但是当您添加更多字符时,大小会减小。

我认为这个没有内置功能,但我想出了这个。希望能对你有所帮助。

.kv 文件

<MyLayout>:
  label_id: label_id
  BoxLayout:
    orientation:"horizontal"
    size: root.width, root.height

    TextInput:
        text: "hello"
        size_hint: 0.1, 0.1
        on_text: root.update_label(self.text)

    Label:
        id: label_id
        size_hint: 0.1, 0.1
        text: "hello"
        font_size: 16 if self.text == '' else min(48,max(10/len(self.text) * 16, 16))

.py 文件

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.uix.label import Label

Builder.load_file("a.kv")

class MyLayout(Widget, App):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

    def update_label(self, text):
        self.ids['label_id'].text = text


class UiApp(App):
    def build(self):
        return MyLayout()


UiApp().run()

我制作了一个文本输入,这样您就可以使用给定的文本输入和字体大小。 因此,当您将一些文本放入 TextInput 时,它会将其传递给 Label。当标签更新其文本时,font_size 将被重新计算。

我使用 min() 和 max() 函数的原因是:

  1. 当你有一个非常大的字符串时,font_size 会变得非常非常小
  2. 当您的字符串中只有 1 或 2 个字符时,font_size 会变得很大

我使用的 font_size 计算的主要“公式”是:

10/len(self.text) * 16

文字越大,font_size 越小。玩弄数字以获得最适合您情况的 font_size。