Kivy标记弄乱了开口方括号

时间:2016-04-26 23:42:14

标签: kivy kivy-language

假设Label小部件有一个文本' abcd [',它会按预期在输出屏幕上打印出正确的内容。但是当我将Label标签小部件的标记设置为True时,它会输出' abcd [[/ color]'。我该如何克服这个问题?我通过添加' \ n'找到了一个可能的解决办法。在文本中的开头括号之后。但由于我有很多小部件连续排在一起,所以换行很明显,看起来有点难看。

对于这个例子,我使用的是Button而不是Label。

这是

的输出
    pets = Pet(name, animal_type, age)
    print('This will be added to the records. ')
    print('Here is the data you entered:')
    print('Pet Name: ', pets.get_pet_name)
    print('Animal Type: ', pets.get_pet_type)
    print('Age: ', pets.get_pet_age)

enter image description here

这是

的输出
Button:
    markup: True
    text: 'abcd\n['

enter image description here

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

1 个答案:

答案 0 :(得分: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()中做了什么。要更改为&#39; [&#39;的颜色,我键入hidden_​​text [4:]而不是hidden_​​text [4]。这是因为当你逃避时(&#39; [&#39;),它所做的一切就是它取代了&#39; [&#39; by&#39;&amp; bl;&#39;。因此,当您使用hidden_​​text [4]时,您将获得此输出:

enter image description here

但是如果你使用hidden_​​text [4:],它会覆盖&amp;之后的字符。直到它到达分号。

要知道我在Label的文字中使用StringProperty的原因,请阅读here