Afaik,没有像在Label
那样对齐的方式,但是,您可以使用padding
将位置推到任意位置。请记住,改变文字的大小会影响居中,因此您需要根据大小的变化重新计算(例如,在处理多种设备,尺寸等时)。
或者有可能甚至一种变通方法,在那里你可以做TextInput
无形的,使用Label
获取触摸事件来触发TextInput
(这将打开键盘)和更改text属性Label
“上TextInput
的变化看文本”。您将失去以这种方式使用光标的可能性,并且您将需要处理包装文本。
实施例:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
Builder.load_string('''
<Test>:
TextInput:
text: 't'
font_size: 60
# left, right
padding_x:
[self.center[0] - self._get_text_width(max(self._lines, key=len), self.tab_width, self._label_cached)/2.0,
0] if self.text else [self.center[0], 0]
# top, bottom
padding_y: [self.height/2.0 - (self.line_height/2.0) * len(self._lines), 0]
''')
class Test(BoxLayout):
pass
class TestApp(App):
def build(self):
return Test()
TestApp().run()
self._get_text_width(...)
显然是一个TextInput
的方法。它与小部件的核心工作,所以它可能是不稳定的(我张贴了第一个例子是,因为我的错误越野车)^^
现在,如果padding_x
的从left
和right
值PADD,你只需要左侧(所不同的只是使用在正确的地方加法和减法),让我们做到这一点:
- 获得在
TextInput
- 最长子通过获得它的宽度(因为它不是一致的!)花式方法
- 减去
center[0]
坐标
当我们已经居中X轴,让我们去Y.的padding_y
值top
和bottom
:
- PADD下来的一半widget的
height
- 得到单行
- 的高度的一半是在的行数乘以数
TextInput
- 的。减去数量从
self.height/2.0
- 底部
0
,我们不关心它
注意:max()
需要一些参数,如果没有text
,max()
会提高其声音。我们将只使用中心与替代左填充关闭它padding_x
:
<padding_x with max> if self.text else [self.center[0], 0]
文字居中水平此处描述:http://stackoverflow.com/q/38421741/1542900 – Nykakin