如何在kv文件中垂直居中输入框内的文本?
我正在尝试在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还很陌生,没找到相关的例子。
这是目前的效果:
(注意:截图中的OK按钮不在上面的kv代码里)
4 个回答
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
,这样你就可以把文本在垂直方向上居中。