Как сделать рамку для текста на этикетке? - PullRequest
0 голосов
/ 04 августа 2020

Я все еще изучаю язык киви. Подскажите пожалуйста, как добавить рамку к тексту в метке в файле kv и спасибо

1 Ответ

0 голосов
/ 04 августа 2020

В kivy языке документации вы можете переопределить стиль виджета, добавив - в начало правила kv. Итак, в kv вы можете определить новый виджет следующим образом:

<-LabelWithBorder@Label>:
    border_width: 0
    border_color: [1,1,1,1]
    canvas.before:    # draw the border
        Color:
            rgba: root.border_color if root.border_width > 0 else [0,0,0,1]
        Rectangle:
            size: self.size
            pos: self.pos
        Color:
            rgba: 0, 0, 0, 1
        Rectangle:
            size: self.width - 2*root.border_width, self.height - 2*root.border_width
            pos: int(self.center_x - (self.width - 2*root.border_width)/2.), int(self.center_y - (self.height - 2*root.border_width)/2.)
    canvas:    # modified from Label
        Color:
            rgba: 1, 1, 1, 1
        Rectangle:
            texture: self.texture
            size: self.texture_size[0] - 2*root.border_width, self.texture_size[1] - 2*root.border_width
            pos: int(self.center_x - self.width/2.) + root.border_width, int(self.center_y - self.height/2.) + root.border_width

canvas.before - это раздел, который граничит aws, а раздел canvas - нормальный Label стиль с небольшими изменениями для учета границы.

Это можно использовать, например, так:

FloatLayout:
    LabelWithBorder:
        text: 'Hello, World'
        font_size: 50
        border_width: 10
        border_color: [1,0,0,1]
        size_hint: None, None
        size: self.texture_size
        pos_hint: {'center_x':0.5, 'center_y':0.5}
...