Как центрировать текст по вертикали внутри текстового ввода в файле kv?

Я пытаюсь центрировать текст TextInput вертикально в Kivy. Но решения пока нет.

Как я могу сделать valign для ввода текста в файле kv? Также, чтобы по центру было удобно знать, как это сделать.

Для ярлыков я проверил пример выравнивания текста от Kivy и там работает alginment, потому что вы можете использовать "valign" и "halign" для выравнивания, но недоступные для TextInputs.

Может быть, трюк с текстурой может помочь, но мне нужно проверить, как это работает. Я видел такой трюк для ярлыка, но я не знаю, работает ли он для TextInput.

Вот мой код kv, который у меня есть прямо сейчас:

#: set Buttonheight1 40
BoxLayout:
    size_hint_y: None
    height: Buttonheight1
    Label:
        id: _number_label
        text: "Number:"
        font_size: 10
        size_hint_x: None
        width: 50
        canvas.after:
            Color:
                rgba: 1,0,0,.5
            Rectangle:
                pos: self.pos
                size: self.size
        TextInput:
            multiline: False
            size_hint_y: None
            height: _number_label.height
            #padding_top: 10
            font_size: 10
            text: str(self.font_size)
            #text: '%s, %s' % (self.get_center_x(), self.get_center_y()) #position test

Объяснение кода kv:

  • Buttonheight1 - это константа с набором kv
  • Canvas.after предназначен только для отладки размера метки
  • Текст ввода текста показывает размер шрифта как фиктивный текст

Возможно, это просто исправить, но я довольно новичок в Kivy и не нашел примера для этого.

Вот как это выглядит на данный момент:

Screenshot TextInput

(Примечание: кнопка ОК на скриншоте отсутствует в коде kv выше)

Ответ 1

Глядя на api, все, что я мог предложить, это то, что вы можете попробовать использовать padding, так как вы можете указать:

Padding of the text: [padding_left, padding_top, padding_right, padding_bottom].

padding also accepts a two argument form [padding_horizontal, padding_vertical] and a one argument form [padding].

Возможно, используя padding_top и/или padding_bottom, например, вы можете центрировать текст по вертикали.

Ответ 2

Что сработало для меня, я использовал pos_hint следующим образом:

TextInput:
    multiline: False
    size_hint_y: None
    height: _number_label.height
    font_size: 10
    text: str(self.font_size)
    pos_hint: {'center_x': 0.5, 'center_y': 0.5}