如何在“文本标记”中动态更改字体大小?

时间:2019-06-21 18:33:56

标签: python kivy

我想在for p in player_list[0:2]:中动态更改字体大小:https://kivy.org/doc/stable/api-kivy.core.text.markup.html

下面的代码很好用。

Text Markup

下面的代码无法正常工作。

str_ = "[size=17sp]" + 'TEST' + "[/size]"

该如何修改?还是用from kivy.metrics import sp font_size = sp(17) str_ = "[size=font_size]" + 'TEST' + "[/size]" 无法实现?

2 个答案:

答案 0 :(得分:1)

有三种可能的解决方法,如下。

摘要

方法1-拆分标记

from kivy.core.text.markup import MarkupLabel

        markup_splitted = MarkupLabel(self.ids.label.text).markup

        font_size = '50sp'
        self.ids.label.text = ''

        for item in markup_splitted:
            if item[:6] == '[size=':
                self.ids.label.text += f'[size={font_size}]'
            else:
                self.ids.label.text += item

方法2-不带sp的整数值

font_size = 17
str_ = f"[size={font_size}]" + 'TEST' + "[/size]"

方法3-带有sp的字符串值

font_size = '17sp'
str_ = f"[size={font_size}]" + 'TEST' + "[/size]"

示例

以下说明了解决此问题的三种方法。

main.py

from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen
from kivy.properties import StringProperty
from kivy.core.text.markup import MarkupLabel


class MarkupTextFontSize(Screen):
    txt = StringProperty('')

    def __init__(self, **kwargs):
        super(MarkupTextFontSize, self).__init__(**kwargs)
        self.txt = '[color=ff3333]Unselectable [size=20]item[/size][/color][anchor=a]a\nChars [anchor=b]b\n[ref=myref]ref[/ref]'
        # self.txt += "[anchor=title1][size=24]This is my Big title.[/size][anchor=content] Hello world"

    def change_font_size(self):
        self.ids.label.font_size = '50sp'

        # Method 1 - split markup
        markup_splitted = MarkupLabel(self.ids.label4.text).markup

        font_size = '50sp'
        self.ids.label4.text = ''

        for item in markup_splitted:
            if item[:6] == '[size=':
                self.ids.label4.text += f'[size={font_size}]'
            else:
                self.ids.label4.text += item

        # Method 2 - using integer value
        font_size = 17
        self.ids.label2.text = f"[size={font_size}]" + 'TEST' + "[/size]"

        # Method 3 - using string value
        font_size = '30sp'
        self.ids.label3.text = f"[anchor=title1][size={font_size}]This is my Big title.[/size][anchor=content] Hello world"


runTouchApp(Builder.load_string("""
MarkupTextFontSize:

<MarkupTextFontSize>:
    BoxLayout:
        orientation: 'vertical'

        Button:
            id: btn
            text: 'Change FontSize'
            size_hint: 1, 0.2
            markup: True
            on_release: root.change_font_size()
        Label:
            id: label
            text: root.txt
            markup: True
        Label:
            id: label2
            text: '[color=ff3333]Unselectable [size=20sp]item[/size][/color]'
            markup: True
        Label:
            id: label3
            text: "[anchor=title1][size=24]This is my Big title.[/size][anchor=content] Hello world"
            markup: True
        Label:
            id: label4
            text: "[anchor=title1][size=24]This is my Big title.[/size][anchor=content] Hello world"
            markup: True
"""))

输出

Before font size changes After font size changes

答案 1 :(得分:0)

尝试插入这样的字符串:

from kivy.metrics import sp
font_size = sp(17)
str_ = f'[size={font_size}]' + 'TEST' + "[/size]"