gpt4 book ai didi

python - Kivy TextInput 水平和垂直对齐(居中文本)

转载 作者:太空宇宙 更新时间:2023-11-03 12:31:27 50 4
gpt4 key购买 nike

如何在 Kivy 的 TextInput 中水平居中放置文本?

我有以下屏幕: wrong screen

但我想像这样集中我的文本: right screen

这是我的 kv 语言的一部分:

        BoxLayout:  
orientation: 'vertical'
Label:
markup: True
text: '[b] Type something... [/b]'
size_hint: 1, 0.6
size: self.parent.size[0], 200
font_size: self.size[0] * 0.1
text_size: self.size
halign: 'center'
valign: 'middle'

canvas.before:
Color:
rgb: 0, 0, 204
Rectangle:
pos: self.pos
size: self.size

TextInput:
focus: True

如何将 TextInput 的文本居中?

最佳答案

Afaik,没有像 Label 中那样的对齐方式,但是,您可以使用 padding将位置推到任何你想要的位置。请记住,更改文本大小会影响居中,因此您需要重新计算大小的更改(例如,在使用多个设备、大小等时)。

或者甚至可以有一个解决方法,您可以使 TextInput 不可见,使用 Label 获取触摸事件以触发 TextInput(将打开键盘)并根据 TextInput 的文本属性更改 Label 的文本。您将失去以这种方式使用光标的可能性,并且您将需要处理换行文本。

示例:

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 的值从 leftright 填充,你将只需要左侧(区别仅在于在正确的地方使用加法和减法),所以让我们这样做:

  1. 获取TextInput中最长的子串
  2. 通过花哨的方法得到它的宽度(因为它不一致!)
  3. center[0] 坐标中减去

当我们已经使 X 轴居中时,让我们转到 Y 轴。padding_y 的值为 topbottom:

  1. 填充小部件高度的一半
  2. 获取单行高度的一半
  3. 将数字乘以 TextInput
  4. 中的行数
  5. self.height/2.0中减去数字
  6. 底部是0,我们不关心它

注意:max() 需要一些参数,如果没有 textmax() 会提高声音。我们将使用仅使用中心的 padding_x 的替代左填充来关闭它:

<padding_x with max> if self.text else [self.center[0], 0]

关于python - Kivy TextInput 水平和垂直对齐(居中文本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40477956/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com