Afaik, нет такой штуки, как выравнивание таким же образом, как и в Label
, однако вы можете использовать padding
, чтобы нажимать позицию, где хотите. Имейте в виду, что изменение размера текста повлияет на центрирование, поэтому вам придется пересчитывать изменения размера (например, при работе с несколькими устройствами, размерами и т. Д.).
Или может быть даже обходной путь, где вы могли бы сделать TextInput
невидимым, используйте Label
для извлечения сенсорного события, чтобы вызвать TextInput
(который откроет клавиатуру) и изменить Label
«s текст на изменение TextInput
» текстового свойства s. Вы потеряете возможность работать с курсором таким образом, и вам нужно будет обрабатывать текст.
Пример:
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
«s значения падд из left
и right
, вам нужно только левый сторона (разница только в использовании сложения и вычитания в нужном месте), так что давайте делать это:
- получить самую длинную подстроку в
TextInput
- получить его ширину (потому что это не соответствует!) через модный метод
- вычесть из
center[0]
Координата
Когда мы уже центрировали ось X, переходим к Y.Значения padding_y
«S являются top
и bottom
:
- падд вниз половины виджета
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