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

AWo*_*olf 12 python kivy

我试图在Kivy中垂直居中TextInput的文本.但还没有解决方案.

如何在kv文件中输入文本?水平居中也是很好的知道,如何做到这一点.

对于标签,我已经检查了Kivy的文本对齐示例,并且alginment正在工作,因为你可以使用'valign'和'halign'来进行对齐,但是这不适用于TextInputs.

也许使用texture_size的技巧可能有所帮助,但我需要检查它是如何工作的.我已经看到了这样一个标签的技巧,但我不知道它是否适用于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
Run Code Online (Sandbox Code Playgroud)

kv代码的说明:

  • Buttonheight1是一个kv设置的常量
  • Canvas.after仅用于调试标签的大小
  • 文本输入的文本将字体大小显示为虚拟文本

也许它很容易修复,但我对Kivy很新,并没有为此找到一个例子.

这就是目前的样子:

截图TextInput

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

Tot*_*tem 10

看看api,我所能建议的是你可以尝试使用填充,因为你可以指定:

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].
Run Code Online (Sandbox Code Playgroud)

也许使用padding_top和/或padding_bottom例如您可以垂直居中文本.

  • 因为padding_y已弃用.我使用[padding_horizo​​ntal,padding_vertical]形式的填充(横向的5只是它看起来更好).现在它垂直居中,并将以下代码添加到TextInput:padding:[5,(self.height - self.line_height)/ 2] (10认同)
  • 谢谢你的提示.我也再次查看了api,发现padding_y会起作用.现在它垂直居中,并将以下代码添加到TextInput:padding_y:(self.height - self.line_height)/ 2 (2认同)

Pal*_*lim 6

正如 AWolf 的评论中已经建议的那样。这似乎效果最好:

padding: [0, (self.height-self.line_height)/2]
Run Code Online (Sandbox Code Playgroud)