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