Afaik,不存在以与中相同的方式对齐的事情Label
但是,您可以使用padding https://kivy.org/docs/api-kivy.uix.textinput.html#kivy.uix.textinput.TextInput.padding将位置推到任何您想要的位置。请记住,更改文本的大小会影响居中,因此您需要重新计算大小的更改(例如,在使用多个设备、大小等时)。
或者甚至可能有一个解决方法,您可以在其中进行TextInput
看不见,使用Label
获取要触发的触摸事件TextInput
(这将打开键盘)并更改Label
的有关更改的文本TextInput
的文本属性。您将失去以这种方式使用光标的可能性,并且您需要处理换行文本。
Example:
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
。它与小部件的核心一起工作,因此可能不稳定(由于我的错误,我发布的第一个示例存在错误)^^
Now if padding_x
的值填充自left
and right
,您只需要左侧(区别仅在于在正确的位置使用加法和减法),所以让我们这样做:
- 获取最长的子串
TextInput
- 通过奇特的方法获取它的宽度(因为它不一致!)
- 从中减去
center[0]
协调
当我们已经将 X 轴居中时,让我们转到 Y 轴。padding_y
的值为top
and bottom
:
- 填充小部件的一半
height
- 获取单行高度的一半
- 将数字乘以行数
TextInput
- 从中减去数字
self.height / 2.0
- 底部是
0
,我们不关心它
Note: max()
需要一些参数,如果没有text
, max()
会提高声音。我们将用替代的左填充来关闭它padding_x
仅使用中心:
<padding_x with max> if self.text else [self.center[0], 0]