【问题标题】:Is there a way to create a kivy label that changes the font size based on how many characters it has有没有办法创建一个 kivy 标签,根据它有多少个字符来改变字体大小
【发布时间】:2021-07-31 18:35:41
【问题描述】:

所以如果标签上只有三个字符,那么字体会很大,但是当你添加更多字符时,字体会减小。

【问题讨论】:

    标签: python kivy kivy-language


    【解决方案1】:

    我不认为这个有内置功能,但我想出了这个。希望它能以某种方式帮助你。

    .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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 2011-06-07
      相关资源
      最近更新 更多