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

2024-06-05

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

I have the following screen: wrong screen

But I want to centralize my text like this: 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

如何将文本输入的文本居中?


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,您只需要左侧(区别仅在于在正确的位置使用加法和减法),所以让我们这样做:

  1. 获取最长的子串TextInput
  2. 通过奇特的方法获取它的宽度(因为它不一致!)
  3. 从中减去center[0]协调

当我们已经将 X 轴居中时,让我们转到 Y 轴。padding_y的值为top and bottom:

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

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

<padding_x with max> if self.text else [self.center[0], 0]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kivy TextInput 水平和垂直对齐(文本居中) 的相关文章

随机推荐

  • 机器学习的周期性数据(例如度角 -> 179 与 -179 相差 2)

    我使用 Python 进行核密度估计 并使用高斯混合模型对多维数据样本的可能性进行排名 每一条数据都是一个角度 我不确定如何处理机器学习的角度数据的周期性 首先 我通过添加 360 来删除所有负角 因此所有负角都变成了正角 179 变成了
  • Sparql 查询子类或等效项

    我想查询尼古丁 产品 的所有子类 结果一定是 鼻腔形式尼古丁 口咽形式尼古丁 4项 参见图片 我尝试通过 rdfs subClassOf 和 owl equivalentClass 查询 但没有成功 尝试从这个例子 https stacko
  • 将占位符文本添加到文本框

    我正在寻找一种将占位符文本添加到文本框的方法 就像在 html5 中使用文本框一样 IE 如果文本框没有文本 则会添加文本Enter some text here 当用户单击它时 占位符文本消失并允许用户输入自己的文本 如果文本框失去焦点并
  • 特定铃声 firebase 通知 xamarin.android

    How i can force the push notification to run ringtone instead of default notification sound is there any way to ovveride
  • Thymeleaf - 格式化时检查 NULL 的最佳实践(即日期)

    我有一个 Thymeleaf 模板代码设置日期格式 有时这个日期会是null在返回的对象中 最好的检查方法是什么null在 Thymeleaf 中这种情况如何 目前该模板抛出以下错误 Caused by java lang IllegalA
  • Camel - “子路线”中的异常处理

    Camel 显式处理两个 范围 的错误处理 Global 每条路线 我遇到的问题是 子路由 中抛出异常 例如 我有这条路线 from direct sendToWebservice processRef massageBeforeSendi
  • UIButton 图像调整大小/缩放以适合

    我有一个非常严重的问题 我不知道如何解决 我正在对 UIButtons 框架进行动画处理 当我对其进行动画处理时 我希望按钮中的图像缩放到与按钮相同的大小 它无需在我的 iPhone 模拟器上执行任何操作即可运行 但是当我在 iPad 模拟
  • 如何在Vuejs中动态管理页面标题?

    我构建一个应用程序 我有一个带有页面标题的标题 目前 我使用视图路由器来定义我的标题 path events name events component Events meta title Liste des v nements 在我的刀片
  • 如何在 C++ 的子目录中创建文件?

    这是我的代码 如何在子目录联系人中创建文件 每次创建该文件时 它都会出现在与我的程序相同的目录中 int main ofstream myfile contacts myfile open a myfile close 在构造函数中指定完整
  • -[MyClassName copyWithZone:] 无法识别的选择器发送到实例

    我的应用程序崩溃了 原因是 MyClassName copyWithZone 无法识别的选择器发送到实例 我有两节课 假设 Class1 和 Class2 Class1 看起来像 Class1 h interface Class1 NSOb
  • 实体框架7审计日志

    我正在将一个旧项目移植到 ASP NET 5 和 Entity Framework 7 我使用数据库优先方法 DNX 脚手架 来创建模型 旧项目基于Entity Framework 4 审计跟踪是通过重写实现的SaveChanges的方法D
  • CMake 警告:无法为目标生成安全的链接器搜索路径

    在为 pcl 项目运行 CMake 时 我收到一条警告消息 Configuring done CMake Warning at CMakeLists txt 12 add executable Cannot generate a safe
  • CDI Bean 访问 Spring bean?

    我知道这听起来很奇怪 将 CDI 焊接 和 Spring 混合用于控制器 但想象一下这种情况 有了CDI 我可以利用 ConversationScoped 这是我的要求之一 到目前为止我不知道我是否可以在这种范围内使用spring 因为如果
  • 使用 Codable 将字符串编码/解码为整数,并在其间使用函数

    我有这个 json 字符串 let json name Wendy Carlos hexA 7AE147AF hexB 851EB851 let data Data json utf8 我想使用 Codable 对该结构进行编码 或返回 s
  • .NET 程序集大小会影响性能吗?

    net 程序集的大小是否会影响性能 您的 Windows 窗体 Web 窗体项目中的程序集数量如何 来自微软的模式和实践提高 NET 应用程序性能和可扩展性 http msdn microsoft com en us library ms9
  • jQuery 面板滑块通过单击按钮打开但不会关闭

    我的页面上有一个按钮 可以使用 jquery 和 Modernizr 框架打开右侧面板 按钮位于屏幕最右侧 单击时 它会向左滑动并打开打开的面板 问题是 再次单击时它不会滑回到原来的位置 HTML div class cd panel fr
  • 调用属于Fragment的Activity的函数

    我正在与多个Fragments在 Android 下 我对如何从嵌入式应用程序发送和接收数据感到困惑 为了简单的解释 我有一个ListFragment and a MapFragment使用解释的方法here https stackover
  • Jest - 语法错误:无法在模块外部使用 import 语句

    我在用jest 24 9 0无需任何配置 从 create react app 全局安装 在这些文件中我使用 es6 模块 使用时没有报错 test react scripts test 但是当我开始使用时jest with test je
  • 测试应用内结算:“发布者无法购买此商品”

    我的应用程序似乎已准备好在我的设备上进行应用内购买程序的 现实生活 测试 但是 我在 Play 商店中收到 发布商无法购买此商品 的错误消息 现在 我应该如何测试这个 我不想通过仅用于测试的虚拟帐户重新安装手机来丢失手机的配置 在开发者控制
  • Kivy TextInput 水平和垂直对齐(文本居中)

    如何在 Kivy 的 TextInput 中水平居中文本 I have the following screen But I want to centralize my text like this 这是我的 kv 语言的一部分 BoxLa