如何在kv文件中垂直居中输入框内的文本?

16 投票
4 回答
6976 浏览
提问于 2025-04-18 04:59

我正在尝试在Kivy中让文本输入框里的文字垂直居中,但还没有找到解决办法。

我该如何在kv文件中为文本输入框设置垂直对齐呢?另外,水平居中也很想知道怎么做。

对于标签,我查看了Kivy的文本对齐示例,那里可以使用'valign'和'halign'来进行对齐,但文本输入框却没有这些选项。

也许可以用texture_size的技巧来解决这个问题,但我还需要了解这个是怎么工作的。我见过这种技巧用于标签,但不确定它是否适用于文本输入框。

这是我现在的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

(注意:截图中的OK按钮不在上面的kv代码里)

4 个回答

0

我知道这是一篇旧帖子……我只是想把答案放在这里,以便有需要的人能再次找到它。

在kivy文件中,在文本输入的属性里添加这一行:

padding : 6,self.height/2 - self.font_size/2,6,6

我在我的自定义文本输入中使用了这段代码。

如你所见,它运行得很好:

在这里输入图片描述

1

对我有效的方法是使用 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}
8

正如AWolf在评论中提到的,这个方法似乎效果最好:

padding: [0, (self.height-self.line_height)/2]
11

根据这个文档,我能给出的建议就是你可以试试使用“内边距”。因为你可以指定:

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,这样你就可以把文本在垂直方向上居中。

撰写回答