Python Kivy - Изменить высоту строки без обрезки текста - PullRequest
0 голосов
/ 05 августа 2020

Есть ли способ уменьшить line_height меток, не обрезая части текста?

import kivy

from kivy.app import App
from kivy.uix.label import Label


class MyApp(App):
    def build(self):
        return Label(
            text='This is a long line\nwith multiple\nline breaks.',
            font_size='100sp',
            line_height=.75
        )


MyApp().run()

Или - если нет - что еще можно сделать для достижения того же эффект?
Заранее спасибо

1 Ответ

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

Поскольку фон Label прозрачный, вы можете сделать три отдельных Labels и переместить их как можно ближе друг к другу. Конечно, слишком близкое расположение приведет к перекрытию. Вот пример:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.label import Label

class MyLabel(Label):
    pass


kv = '''
<MyLabel>:
    font_size: '100sp'
    size_hint: None, None
    size: self.texture_size
FloatLayout:
    MyLabel:
        text: 'This is a long line'
        pos: 10, lab2.y + lab2.height - 25  # position this label above the lower one, but down 25 pixels
    MyLabel:
        id: lab2
        text: 'with multiple'
        pos: 10, 0 + lab1.height - 25  # position this label above the lower one, but down 25 pixels
    MyLabel:
        id: lab1
        text: 'line breaks.'
        pos: 10, 0
'''


class MyApp(App):
    def build(self):
        return Builder.load_string(kv)


MyApp().run()

Обратите внимание, что при использовании одного Label для нескольких строк минимальное значение межстрочного интервала (line_height) устанавливается для предотвращения перекрытия верхних и нижних текстов. Когда вы запускаете мой пример кода, верхние и нижние элементы не перекрываются, но это просто удача.

...