0

假设 Label 小部件有一个文本“abcd[”,它会按预期在输出屏幕上打印出正确的内容。但是,当我将该 Label 小部件的标记设置为 True 时,它​​会打印出“abcd [[/color]”。我该如何克服呢?通过在文本的左括号后添加“\n”,我发现了一种可能的解决方法。但由于我有很多小部件彼此靠近,所以换行符非常明显,看起来有点难看。

对于此示例,我使用的是 Button 而不是 Label。

这是输出

Button:
    markup: True
    text: 'abcd\n['

在此处输入图像描述

这是输出

Button:
    markup: True
    text: 'abcd\n[\n'

在此处输入图像描述

正如我所说,添加换行符会使它看起来很难看,并且附近小部件之间的文本级别差异看起来非常明显。

4

1 回答 1

1

这可以通过使用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,请阅读此处

于 2016-04-27T11:03:52.493 回答