这可以通过使用escape_markup
'[' 或将其替换为 '&bl;' 来解决。
方法 1:使用escape_markup
.
from kivy.app import App
from kivy.lang import Builder
kv = ('''
#:import escape kivy.utils.escape_markup
Label:
markup: True
text: 'abcd{}'.format(escape('['))
''')
class mainApp(App):
def build(self):
return Builder.load_string(kv)
if __name__ == '__main__':
mainApp().run()
方法2:字符替换。
from kivy.app import App
from kivy.lang import Builder
kv = ('''
#:import escape kivy.utils.escape_markup
Label:
markup: True
text: 'abcd&bl;'
''')
class mainApp(App):
def build(self):
return Builder.load_string(kv)
if __name__ == '__main__':
mainApp().run()
现在,如果你想改变 '[' 的颜色,你必须这样做:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.properties import StringProperty
kv = (
'''
#:import escape kivy.utils.escape_markup
<L>:
markup: True
text: self.hidden_text
<B>:
Button:
text: 'press'
on_press: root.lel()
L:
id: lol
hidden_text: 'abcd{}'.format(escape('['))
markup: True
B
'''
)
class L(Label):
hidden_text = StringProperty('')
class B(BoxLayout):
def lel(self):
self.ids.lol.text = '{}[color=#E5D209]{}[/color]'.format(self.ids.lol.hidden_text[:4], self.ids.lol.hidden_text[4:])
class color(App):
def build(self):
return Builder.load_string(kv)
if __name__ == "__main__":
color().run()
请注意我在 B 类的 lel() 中所做的。要更改为“[”的颜色,我输入了 hidden_text[4:] 而不是 hidden_text[4]。这是因为当您执行 escape('[') 时,它所做的只是将 '[' 替换为 '&bl;'。因此,当您使用 hidden_text[4] 时,您将获得以下输出:
但是如果你使用 hidden_text[4:],它会覆盖 & 之后的字符,直到它到达分号。
要了解我为什么在标签的文本上使用 StringProperty,请阅读此处。