我想在Text Markup
中动态更改字体大小:https://kivy.org/doc/stable/api-kivy.core.text.markup.html
下面的代码运行良好。
str_ = "[size=17sp]" + 'TEST' + "[/size]"
下面的代码无法正常工作。
from kivy.metrics import sp
font_size = sp(17)
str_ = "[size=font_size]" + 'TEST' + "[/size]"
我应该如何修改呢?还是用
Text Markup
无法实现? 最佳答案
有三种可能的解决方法,它们如下。
片段
方法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
"""))
输出量