【问题标题】:How to center text vertically inside a text input in kv file?如何在 kv 文件的文本输入中垂直居中文本?
【发布时间】:2014-06-17 18:28:34
【问题描述】:

我正在尝试在 Kivy 中将 TextInput 的文本垂直居中。 但目前还没有解决方案。

如何对 kv 文件中的文本输入进行 valign?水平居中也很高兴知道如何做到这一点。

对于标签,我检查了 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

kv代码说明:

  • Buttonheight1 是一个设置了 kv 的常数
  • canvas.after 只是为了调试标签的大小
  • 文本输入的文本将字体大小显示为虚拟文本

也许修复起来很简单,但我对 Kivy 还很陌生,还没有找到一个例子。

这是目前的样子:

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

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    查看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].
    

    例如,您可以使用padding_top 和/或padding_bottom 将文本垂直居中。

    【讨论】:

    • 感谢您的提示。我也再次查看了 api,发现 padding_y 可以工作。现在它垂直居中,并将以下代码添加到 TextInput: padding_y: ( self.height - self.line_height ) / 2
    • 因为 padding_y 已被弃用。我使用 [padding_horizo​​ntal, padding_vertical] 形式的填充(水平的 5 只是为了看起来更好)。现在它垂直居中,并将以下代码添加到 TextInput: padding: [5, ( self.height - self.line_height ) / 2]
    【解决方案2】:

    正如 AWolf 在 cmets 中所建议的那样。 这似乎效果最好:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我知道这是旧帖子.. 如果有人再次搜索,我只想给出答案。 这是解决方案:

        在 kivy 文件的 TextInput 属性中添加这一行

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

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

        如您所见,它运行良好:

        【讨论】:

          猜你喜欢
          • 2018-04-02
          • 2011-07-06
          • 1970-01-01
          • 2013-10-15
          • 1970-01-01
          • 2015-09-16
          • 2011-07-23
          相关资源
          最近更新 更多